/**
 *
 */
import Util;
import OpenApi;
import OpenApiUtil;
import EndpointUtil;

extends OpenApi;


init(config: OpenApi.Config){
  super(config);
  @endpointRule = '';
  
  checkConfig(config);
  @endpoint = getEndpoint('eflo', @regionId, @endpointRule, @network, @suffix, @endpointMap, @endpoint);
}

function getEndpoint(productId: string, regionId: string, endpointRule: string, network: string, suffix: string, endpointMap: map[string]string, endpoint: string) throws: string{
  if (!Util.empty(endpoint)) {
    return endpoint;
  }
  
  if (!Util.isUnset(endpointMap) && !Util.empty(endpointMap[regionId])) {
    return endpointMap[regionId];
  }
  return EndpointUtil.getEndpointRules(productId, regionId, endpointRule, network, suffix);
}

model AssignLeniPrivateIpAddressRequest {
  clientToken?: string(name='ClientToken', description='The idempotent identifier.', example='3fd79d62-ab1d-11ec-9a53-0242ac110004'),
  description?: string(name='Description', description='The description of the response code.', example='wuhuaiyu'),
  elasticNetworkInterfaceId?: string(name='ElasticNetworkInterfaceId', description='Lingjun Elastic Network Interface ID.

This parameter is required.', example='leni-1234****'),
  privateIpAddress?: string(name='PrivateIpAddress', description='Lingjun Elastic Network Interface secondary private network IP (automatically assigned by default).', example='10.0.****'),
  regionId?: string(name='RegionId', description='The region ID.

This parameter is required.', example='cn-wulanchabu'),
}

model AssignLeniPrivateIpAddressResponseBody = {
  accessDeniedDetail?: string(name='AccessDeniedDetail', description='The details about the access denial.

>  This parameter is returned only if Resource Access Management (RAM) permission verification failed.', example='None'),
  code?: int32(name='Code', description='The response status code.', example='0'),
  content?: {
    elasticNetworkInterfaceId?: string(name='ElasticNetworkInterfaceId', description='Lingjun Elastic Network Interface ID.', example='leni-1234****'),
    ipName?: string(name='IpName', description='Lingjun Elastic Network Interface secondary private IP unique identifier.', example='sip-lzwx****'),
  }(name='Content', description='The response data.'),
  message?: string(name='Message', description='The response message.', example='success'),
  requestId?: string(name='RequestId', description='The request ID.', example='A88DFED5-24B7-5A3E-87DE-380BF06F3C90'),
}

model AssignLeniPrivateIpAddressResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: AssignLeniPrivateIpAddressResponseBody(name='body'),
}

/**
 * @summary Apply for a secondary private IP address for the current Lingjun Elastic Network Interface. You can automatically assign a secondary private IP address.
 *
 * @description Apply for a secondary private IP address for the specified Lingjun Elastic Network Interface.
 * *   If the PrivateIp field is empty, a secondary private IP address is automatically assigned and the unique identifier of the IP address is returned.
 * *   You can use the GetLeniPrivateIpAddress or ListLeniPrivateIpAddresses interface to check whether the secondary private IP address is assigned.
 *
 * @param request AssignLeniPrivateIpAddressRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return AssignLeniPrivateIpAddressResponse
 */
async function assignLeniPrivateIpAddressWithOptions(request: AssignLeniPrivateIpAddressRequest, runtime: Util.RuntimeOptions): AssignLeniPrivateIpAddressResponse {
  Util.validateModel(request);
  var body : map[string]any = {};
  if (!Util.isUnset(request.clientToken)) {
    body['ClientToken'] = request.clientToken;
  }
  if (!Util.isUnset(request.description)) {
    body['Description'] = request.description;
  }
  if (!Util.isUnset(request.elasticNetworkInterfaceId)) {
    body['ElasticNetworkInterfaceId'] = request.elasticNetworkInterfaceId;
  }
  if (!Util.isUnset(request.privateIpAddress)) {
    body['PrivateIpAddress'] = request.privateIpAddress;
  }
  if (!Util.isUnset(request.regionId)) {
    body['RegionId'] = request.regionId;
  }
  var req = new OpenApi.OpenApiRequest{ 
    body = OpenApiUtil.parseToMap(body),
  };
  var params = new OpenApi.Params{
    action = 'AssignLeniPrivateIpAddress',
    version = '2022-05-30',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'POST',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Apply for a secondary private IP address for the current Lingjun Elastic Network Interface. You can automatically assign a secondary private IP address.
 *
 * @description Apply for a secondary private IP address for the specified Lingjun Elastic Network Interface.
 * *   If the PrivateIp field is empty, a secondary private IP address is automatically assigned and the unique identifier of the IP address is returned.
 * *   You can use the GetLeniPrivateIpAddress or ListLeniPrivateIpAddresses interface to check whether the secondary private IP address is assigned.
 *
 * @param request AssignLeniPrivateIpAddressRequest
 * @return AssignLeniPrivateIpAddressResponse
 */
async function assignLeniPrivateIpAddress(request: AssignLeniPrivateIpAddressRequest): AssignLeniPrivateIpAddressResponse {
  var runtime = new Util.RuntimeOptions{};
  return assignLeniPrivateIpAddressWithOptions(request, runtime);
}

model AssignPrivateIpAddressRequest {
  assignMac?: boolean(name='AssignMac', description='Specifies whether to assign a mac address.', example='true'),
  clientToken?: string(name='ClientToken', description='By default, popApi is not ignored and idempotent', example='3fd79d62-ab1d-11ec-9a53-0242ac110004'),
  description?: string(name='Description', description='The description of the variable.', example='test'),
  networkInterfaceId?: string(name='NetworkInterfaceId', description='The ID of the network interface controller.

This parameter is required.', example='lni-bp18exxqa2rvfn45e5pz'),
  privateIpAddress?: string(name='PrivateIpAddress', description='The secondary private IP address.', example='10.0.6.194'),
  regionId?: string(name='RegionId', description='The region ID.

This parameter is required.', example='cn-wulanchabu'),
  skipConfig?: boolean(name='SkipConfig', description='The default value is false. If you set the value to true, the secondary private IP address application process can be accelerated.

>  For more information, submit a ticket.', example='false'),
  subnetId?: string(name='SubnetId', description='It belongs to the Lingjun subnet.

This parameter is required.', example='subnet-f3zfzmnc'),
}

model AssignPrivateIpAddressResponseBody = {
  accessDeniedDetail?: string(name='AccessDeniedDetail', description='The detailed reason why the access was denied.', example='None'),
  code?: int32(name='Code', description='The response status code.', example='0'),
  content?: {
    ipName?: string(name='IpName', description='The unique IP identifier.', example='sip-8exxqa2r'),
    networkInterfaceId?: string(name='NetworkInterfaceId', description='Lingjun network interface controller ID.', example='lni-bp18exxqa2rvfn45e5pz'),
  }(name='Content', description='The response data.'),
  message?: string(name='Message', description='The error message. (If the instance is in the Exception state, the exception cause is prompted.)', example='success'),
  requestId?: string(name='RequestId', description='The request ID.', example='AC8C713A-A9F4-5984-A5E1-76496DF35153'),
}

model AssignPrivateIpAddressResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: AssignPrivateIpAddressResponseBody(name='body'),
}

/**
 * @summary Applies for a private secondary IP address for the current LNI. You can also call this operation to assign a secondary MAC address to the current LNI.
 *
 * @description >  Apply for secondary private IP addresses
 * *   By default, each network interface controller can apply for three secondary private IP addresses. If the quota is exceeded, contact the administrator.
 * *   The secondary private IP address is allocated from the Lingjun subnet to which the current network interface controller belongs. The first address and the last two addresses belong to reserved addresses and do not participate in the allocation.
 *
 * @param request AssignPrivateIpAddressRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return AssignPrivateIpAddressResponse
 */
async function assignPrivateIpAddressWithOptions(request: AssignPrivateIpAddressRequest, runtime: Util.RuntimeOptions): AssignPrivateIpAddressResponse {
  Util.validateModel(request);
  var body : map[string]any = {};
  if (!Util.isUnset(request.assignMac)) {
    body['AssignMac'] = request.assignMac;
  }
  if (!Util.isUnset(request.clientToken)) {
    body['ClientToken'] = request.clientToken;
  }
  if (!Util.isUnset(request.description)) {
    body['Description'] = request.description;
  }
  if (!Util.isUnset(request.networkInterfaceId)) {
    body['NetworkInterfaceId'] = request.networkInterfaceId;
  }
  if (!Util.isUnset(request.privateIpAddress)) {
    body['PrivateIpAddress'] = request.privateIpAddress;
  }
  if (!Util.isUnset(request.regionId)) {
    body['RegionId'] = request.regionId;
  }
  if (!Util.isUnset(request.skipConfig)) {
    body['SkipConfig'] = request.skipConfig;
  }
  if (!Util.isUnset(request.subnetId)) {
    body['SubnetId'] = request.subnetId;
  }
  var req = new OpenApi.OpenApiRequest{ 
    body = OpenApiUtil.parseToMap(body),
  };
  var params = new OpenApi.Params{
    action = 'AssignPrivateIpAddress',
    version = '2022-05-30',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'POST',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Applies for a private secondary IP address for the current LNI. You can also call this operation to assign a secondary MAC address to the current LNI.
 *
 * @description >  Apply for secondary private IP addresses
 * *   By default, each network interface controller can apply for three secondary private IP addresses. If the quota is exceeded, contact the administrator.
 * *   The secondary private IP address is allocated from the Lingjun subnet to which the current network interface controller belongs. The first address and the last two addresses belong to reserved addresses and do not participate in the allocation.
 *
 * @param request AssignPrivateIpAddressRequest
 * @return AssignPrivateIpAddressResponse
 */
async function assignPrivateIpAddress(request: AssignPrivateIpAddressRequest): AssignPrivateIpAddressResponse {
  var runtime = new Util.RuntimeOptions{};
  return assignPrivateIpAddressWithOptions(request, runtime);
}

model AssociateVpdCidrBlockRequest {
  regionId?: string(name='RegionId', description='The region ID.

This parameter is required.', example='cn-wulanchabu'),
  secondaryCidrBlock?: string(name='SecondaryCidrBlock', description='The additional CIDR block.

This parameter is required.', example='172.16.0.0/12'),
  vpdId?: string(name='VpdId', description='The ID of the Lingjun CIDR block.

This parameter is required.', example='vpd-omqutbff'),
}

model AssociateVpdCidrBlockResponseBody = {
  accessDeniedDetail?: string(name='AccessDeniedDetail', description='The detailed reason why the access was denied.', example='None'),
  code?: int32(name='Code', description='The response status code.', example='0'),
  content?: {
    vpdId?: string(name='VpdId', description='The ID of the Lingjun CIDR block.', example='vpd-eoiy88ju'),
  }(name='Content', description='The response data.'),
  message?: string(name='Message', description='The error message. (If the instance is in the Exception state, the exception cause is prompted.)', example='success'),
  requestId?: string(name='RequestId', description='The request ID.', example='9C50C9CD-E799-54DA-BA7A-1FAF3DF80857'),
}

model AssociateVpdCidrBlockResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: AssociateVpdCidrBlockResponseBody(name='body'),
}

/**
 * @summary When the VPD primary network segment address is not enough to allocate, you can choose to create an additional network segment as the additional network segment of the VPD primary network segment.
 *
 * @description >  **Add a CIDR block**
 * *   The CIDR block cannot start with 0. The subnet mask must be 8 to 28 bits in length.
 * *   The secondary IPv4 CIDR block must not overlap with the primary IPv4 CIDR block of the Lingjun CIDR block and the added secondary IPv4 CIDR block.
 * *   You cannot use 100.64.0.0/10, 224.0.0.0/4, 127.0.0.0/8, or 169.254.0.0/16 as the CIDR block of Lingjun. Example: In the Lingjun CIDR block whose primary IPv4 CIDR block is 192.168.0.0/16, you cannot add the following CIDR blocks as additional IPv4 CIDR blocks. The CIDR block that is in the same range as 192.168.0.0/16. A CIDR block that is larger than 192.168.0.0/16. Example: 192.168.0.0/8. A CIDR block that is smaller than 192.168.0.0/16. Example: 192.168.0.0/24.
 * *   By default, each tenant can create three additional CIDR blocks in each region.
 *
 * @param request AssociateVpdCidrBlockRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return AssociateVpdCidrBlockResponse
 */
async function associateVpdCidrBlockWithOptions(request: AssociateVpdCidrBlockRequest, runtime: Util.RuntimeOptions): AssociateVpdCidrBlockResponse {
  Util.validateModel(request);
  var body : map[string]any = {};
  if (!Util.isUnset(request.regionId)) {
    body['RegionId'] = request.regionId;
  }
  if (!Util.isUnset(request.secondaryCidrBlock)) {
    body['SecondaryCidrBlock'] = request.secondaryCidrBlock;
  }
  if (!Util.isUnset(request.vpdId)) {
    body['VpdId'] = request.vpdId;
  }
  var req = new OpenApi.OpenApiRequest{ 
    body = OpenApiUtil.parseToMap(body),
  };
  var params = new OpenApi.Params{
    action = 'AssociateVpdCidrBlock',
    version = '2022-05-30',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'POST',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary When the VPD primary network segment address is not enough to allocate, you can choose to create an additional network segment as the additional network segment of the VPD primary network segment.
 *
 * @description >  **Add a CIDR block**
 * *   The CIDR block cannot start with 0. The subnet mask must be 8 to 28 bits in length.
 * *   The secondary IPv4 CIDR block must not overlap with the primary IPv4 CIDR block of the Lingjun CIDR block and the added secondary IPv4 CIDR block.
 * *   You cannot use 100.64.0.0/10, 224.0.0.0/4, 127.0.0.0/8, or 169.254.0.0/16 as the CIDR block of Lingjun. Example: In the Lingjun CIDR block whose primary IPv4 CIDR block is 192.168.0.0/16, you cannot add the following CIDR blocks as additional IPv4 CIDR blocks. The CIDR block that is in the same range as 192.168.0.0/16. A CIDR block that is larger than 192.168.0.0/16. Example: 192.168.0.0/8. A CIDR block that is smaller than 192.168.0.0/16. Example: 192.168.0.0/24.
 * *   By default, each tenant can create three additional CIDR blocks in each region.
 *
 * @param request AssociateVpdCidrBlockRequest
 * @return AssociateVpdCidrBlockResponse
 */
async function associateVpdCidrBlock(request: AssociateVpdCidrBlockRequest): AssociateVpdCidrBlockResponse {
  var runtime = new Util.RuntimeOptions{};
  return associateVpdCidrBlockWithOptions(request, runtime);
}

model AttachElasticNetworkInterfaceRequest {
  elasticNetworkInterfaceId?: string(name='ElasticNetworkInterfaceId', description='The ID of the ENI.

This parameter is required.', example='leni-1234****'),
  nodeId?: string(name='NodeId', description='The ID of the node.

This parameter is required.', example='e01-cn-lbj3aej****'),
  regionId?: string(name='RegionId', description='The region ID of the disk.

This parameter is required.', example='cn-wulanchabu'),
}

model AttachElasticNetworkInterfaceResponseBody = {
  accessDeniedDetail?: string(name='AccessDeniedDetail', description='The detailed reason why the access was denied.', example='None'),
  code?: int32(name='Code', description='The response status code.', example='0'),
  content?: any(name='Content', description='Response body', example='[]'),
  message?: string(name='Message', description='The message returned.', example='success'),
  requestId?: string(name='RequestId', description='The request ID.', example='039C3C3A-3C37-5672-80D5-D8CD48C676D1'),
}

model AttachElasticNetworkInterfaceResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: AttachElasticNetworkInterfaceResponseBody(name='body'),
}

/**
 * @summary Lingjun ENI is bound to NC.
 *
 * @description This interface is an asynchronous interface. You need to use the query interface to wait for the Lingjun Elastic Network Interface to reach the available state.
 *
 * @param request AttachElasticNetworkInterfaceRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return AttachElasticNetworkInterfaceResponse
 */
async function attachElasticNetworkInterfaceWithOptions(request: AttachElasticNetworkInterfaceRequest, runtime: Util.RuntimeOptions): AttachElasticNetworkInterfaceResponse {
  Util.validateModel(request);
  var body : map[string]any = {};
  if (!Util.isUnset(request.elasticNetworkInterfaceId)) {
    body['ElasticNetworkInterfaceId'] = request.elasticNetworkInterfaceId;
  }
  if (!Util.isUnset(request.nodeId)) {
    body['NodeId'] = request.nodeId;
  }
  if (!Util.isUnset(request.regionId)) {
    body['RegionId'] = request.regionId;
  }
  var req = new OpenApi.OpenApiRequest{ 
    body = OpenApiUtil.parseToMap(body),
  };
  var params = new OpenApi.Params{
    action = 'AttachElasticNetworkInterface',
    version = '2022-05-30',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'POST',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Lingjun ENI is bound to NC.
 *
 * @description This interface is an asynchronous interface. You need to use the query interface to wait for the Lingjun Elastic Network Interface to reach the available state.
 *
 * @param request AttachElasticNetworkInterfaceRequest
 * @return AttachElasticNetworkInterfaceResponse
 */
async function attachElasticNetworkInterface(request: AttachElasticNetworkInterfaceRequest): AttachElasticNetworkInterfaceResponse {
  var runtime = new Util.RuntimeOptions{};
  return attachElasticNetworkInterfaceWithOptions(request, runtime);
}

model CreateElasticNetworkInterfaceRequest {
  clientToken?: string(name='ClientToken', description='The POP API is not ignored by default and is used for idempotence.', example='3fd79d62-ab1d-11ec-9a53-0242ac110004'),
  description?: string(name='Description', description='The description of the response code.', example='Description'),
  enableJumboFrame?: boolean(name='EnableJumboFrame', description='Whether to enable the jumbo frame capability', example='True'),
  nodeId?: string(name='NodeId', description='The ID of the Lingjun node.', example='e01-cn-lbj3aej****'),
  regionId?: string(name='RegionId', description='The region ID.

This parameter is required.', example='cn-wulanchabu'),
  resourceGroupId?: string(name='ResourceGroupId'),
  securityGroupId?: string(name='SecurityGroupId', description='The ID of the security group.', example='sg-wz9fj2s3o21nw2****'),
  vSwitchId?: string(name='VSwitchId', description='The ID of the vSwitch.', example='vsw-t4nahb0pxck****'),
  vpcId?: string(name='VpcId', description='The ID of the VPC.

>  If the NodeId parameter is empty, the VpcId parameter is required. If the NodeId parameter is not empty, the VpcId parameter is optional.', example='vpc-uf6aa4ddo97fr****'),
  zoneId?: string(name='ZoneId', description='The zone ID.

This parameter is required.', example='cn-wulanchabu-a'),
}

model CreateElasticNetworkInterfaceResponseBody = {
  accessDeniedDetail?: string(name='AccessDeniedDetail', description='The details about the access denial. This parameter is returned only if Resource Access Management (RAM) permission verification failed.', example='None'),
  code?: int32(name='Code', description='The response status code.', example='0'),
  content?: {
    elasticNetworkInterfaceId?: string(name='ElasticNetworkInterfaceId', description='Lingjun Elastic Network Interface ID.', example='leni-1fejojjo****'),
    nodeId?: string(name='NodeId', description='The ID of the Lingjun node.', example='e01-cn-lbj3aej****'),
  }(name='Content', description='The response data.'),
  message?: string(name='Message', description='The response message.', example='success'),
  requestId?: string(name='RequestId', description='The request ID.', example='A88DFED5-24B7-5A3E-87DE-380BF06F3C90'),
}

model CreateElasticNetworkInterfaceResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: CreateElasticNetworkInterfaceResponseBody(name='body'),
}

/**
 * @summary Creates an LENI.
 *
 * @param request CreateElasticNetworkInterfaceRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return CreateElasticNetworkInterfaceResponse
 */
async function createElasticNetworkInterfaceWithOptions(request: CreateElasticNetworkInterfaceRequest, runtime: Util.RuntimeOptions): CreateElasticNetworkInterfaceResponse {
  Util.validateModel(request);
  var body : map[string]any = {};
  if (!Util.isUnset(request.clientToken)) {
    body['ClientToken'] = request.clientToken;
  }
  if (!Util.isUnset(request.description)) {
    body['Description'] = request.description;
  }
  if (!Util.isUnset(request.enableJumboFrame)) {
    body['EnableJumboFrame'] = request.enableJumboFrame;
  }
  if (!Util.isUnset(request.nodeId)) {
    body['NodeId'] = request.nodeId;
  }
  if (!Util.isUnset(request.regionId)) {
    body['RegionId'] = request.regionId;
  }
  if (!Util.isUnset(request.resourceGroupId)) {
    body['ResourceGroupId'] = request.resourceGroupId;
  }
  if (!Util.isUnset(request.securityGroupId)) {
    body['SecurityGroupId'] = request.securityGroupId;
  }
  if (!Util.isUnset(request.vSwitchId)) {
    body['VSwitchId'] = request.vSwitchId;
  }
  if (!Util.isUnset(request.vpcId)) {
    body['VpcId'] = request.vpcId;
  }
  if (!Util.isUnset(request.zoneId)) {
    body['ZoneId'] = request.zoneId;
  }
  var req = new OpenApi.OpenApiRequest{ 
    body = OpenApiUtil.parseToMap(body),
  };
  var params = new OpenApi.Params{
    action = 'CreateElasticNetworkInterface',
    version = '2022-05-30',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'POST',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Creates an LENI.
 *
 * @param request CreateElasticNetworkInterfaceRequest
 * @return CreateElasticNetworkInterfaceResponse
 */
async function createElasticNetworkInterface(request: CreateElasticNetworkInterfaceRequest): CreateElasticNetworkInterfaceResponse {
  var runtime = new Util.RuntimeOptions{};
  return createElasticNetworkInterfaceWithOptions(request, runtime);
}

model CreateErRequest {
  description?: string(name='Description', description='The description of the document.', example='test'),
  erName?: string(name='ErName', description='Lingjun HUB Name

This parameter is required.', example='er-wulanchabu-main'),
  masterZoneId?: string(name='MasterZoneId', description='Primary Zone

This parameter is required.', example='cn-wulanchabu-b'),
  regionId?: string(name='RegionId', description='The region ID.

This parameter is required.', example='cn-wulanchabu'),
  resourceGroupId?: string(name='ResourceGroupId', description='Resource group instance ID', example='rg-acfmyuzlx2iihcy'),
}

model CreateErResponseBody = {
  accessDeniedDetail?: string(name='AccessDeniedDetail', description='The detailed information about the failed permission verification.', example='None'),
  code?: int32(name='Code', description='The response status code.', example='0'),
  content?: {
    erId?: string(name='ErId', description='Lingjun HUB ID', example='er-aueyxxsy'),
  }(name='Content', description='The response parameters.'),
  message?: string(name='Message', description='The error message. (If the instance is in the Exception state, the exception cause is prompted.)', example='success'),
  requestId?: string(name='RequestId', description='Request ID of the current request', example='AC8C713A-A9F4-5984-A5E1-76496DF35153'),
}

model CreateErResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: CreateErResponseBody(name='body'),
}

/**
 * @summary Create a Lingjun HUB.
 *
 * @description When you call this operation to create a Lingjun HUB, note that:
 * *   Make sure that you have sufficient Lingjun HUB quota.
 * *   This interface is an asynchronous interface. After this interface is called, the system will return the ID of a Lingjun HUB. At this time, the Lingjun HUB instance may not be created yet, and the system background creation task is still in progress. You can call the ListErs or GetEr operation to query the status of the Lingjun HUB.
 *     *   If the status of the Lingjun HUB is Executing, it indicates that it is being created.
 *     *   If the status of the Lingjun HUB is Available, the creation is successful.
 *
 * @param request CreateErRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return CreateErResponse
 */
async function createErWithOptions(request: CreateErRequest, runtime: Util.RuntimeOptions): CreateErResponse {
  Util.validateModel(request);
  var body : map[string]any = {};
  if (!Util.isUnset(request.description)) {
    body['Description'] = request.description;
  }
  if (!Util.isUnset(request.erName)) {
    body['ErName'] = request.erName;
  }
  if (!Util.isUnset(request.masterZoneId)) {
    body['MasterZoneId'] = request.masterZoneId;
  }
  if (!Util.isUnset(request.regionId)) {
    body['RegionId'] = request.regionId;
  }
  if (!Util.isUnset(request.resourceGroupId)) {
    body['ResourceGroupId'] = request.resourceGroupId;
  }
  var req = new OpenApi.OpenApiRequest{ 
    body = OpenApiUtil.parseToMap(body),
  };
  var params = new OpenApi.Params{
    action = 'CreateEr',
    version = '2022-05-30',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'POST',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Create a Lingjun HUB.
 *
 * @description When you call this operation to create a Lingjun HUB, note that:
 * *   Make sure that you have sufficient Lingjun HUB quota.
 * *   This interface is an asynchronous interface. After this interface is called, the system will return the ID of a Lingjun HUB. At this time, the Lingjun HUB instance may not be created yet, and the system background creation task is still in progress. You can call the ListErs or GetEr operation to query the status of the Lingjun HUB.
 *     *   If the status of the Lingjun HUB is Executing, it indicates that it is being created.
 *     *   If the status of the Lingjun HUB is Available, the creation is successful.
 *
 * @param request CreateErRequest
 * @return CreateErResponse
 */
async function createEr(request: CreateErRequest): CreateErResponse {
  var runtime = new Util.RuntimeOptions{};
  return createErWithOptions(request, runtime);
}

model CreateErAttachmentRequest {
  autoReceiveAllRoute?: boolean(name='AutoReceiveAllRoute', description='Indicates whether to automatically receive all routes from all instances under the Lingjun HUB. Valid values:

*   **true**: received automatically.
*   **false**: Not received.

This parameter is required.', example='true'),
  erAttachmentName?: string(name='ErAttachmentName', description='The name of the network instance connection.

This parameter is required.', example='er-attachemnt-vpd-xksd2obl'),
  erId?: string(name='ErId', description='Lingjun HUB ID.

This parameter is required.', example='er-kkopgtne'),
  instanceId?: string(name='InstanceId', description='The ID of the network instance. Valid values: **VPD** and **VCC**.

For more information, see [What is Lingjun?](https://help.aliyun.com/document_detail/444430.html)

You can query **Lingjun CIDR Block** and **Lingjun Connection** by [ListVpds](https://help.aliyun.com/document_detail/2331077.html) and [ListVccs](https://help.aliyun.com/document_detail/2399526.html?) respectively.

This parameter is required.', example='vpd-xksd2obl'),
  instanceType?: string(name='InstanceType', description='The category of the instance. Valid values:

*   **VPD**: indicates the Lingjun CIDR block.
*   **VCC**: indicates a Lingjun connection.

This parameter is required.', example='VPD'),
  regionId?: string(name='RegionId', description='The region ID.

This parameter is required.', example='cn-wulanchabu'),
  resourceTenantId?: string(name='ResourceTenantId', description='The ID of the tenant to which the resource belongs. This parameter is required for cross-account resources.', example='1620939556166277'),
}

model CreateErAttachmentResponseBody = {
  accessDeniedDetail?: string(name='AccessDeniedDetail', description='The detailed information about the failed permission verification.', example='None'),
  code?: int32(name='Code', description='The response status code.', example='0'),
  content?: {
    erAttachmentId?: string(name='ErAttachmentId', description='The ID of the network connection instance.', example='er-attachment-ggjbfhqv'),
  }(name='Content', description='The response data.'),
  message?: string(name='Message', description='The error message. (If the instance is in the Exception state, the exception cause is displayed.)', example='success'),
  requestId?: string(name='RequestId', description='The request ID.', example='DBAD15D6-3F47-5B36-8A92-57C2919D13D0'),
}

model CreateErAttachmentResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: CreateErAttachmentResponseBody(name='body'),
}

/**
 * @summary Create a network instance connection.
 *
 * @description When you call this operation to create a network instance connection, note that:
 * *   Make sure that you have created a Lingjun HUB instance.
 * *   Make sure that you have sufficient quota for network instance connections.
 * *   This operation is an asynchronous operation. After you call this operation, the system returns the ID of the network instance connection. In this case, the network instance connection may not be created yet, and the system is still creating the network instance in the background. You can query the connection status of a network instance by ListErAttachments or GetErAttachment:
 *     *   If the connection status of the network instance is Executing, the network instance is being created.
 *     *   If the connection status of the network instance is Available, the network instance is created.
 *
 * @param request CreateErAttachmentRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return CreateErAttachmentResponse
 */
async function createErAttachmentWithOptions(request: CreateErAttachmentRequest, runtime: Util.RuntimeOptions): CreateErAttachmentResponse {
  Util.validateModel(request);
  var body : map[string]any = {};
  if (!Util.isUnset(request.autoReceiveAllRoute)) {
    body['AutoReceiveAllRoute'] = request.autoReceiveAllRoute;
  }
  if (!Util.isUnset(request.erAttachmentName)) {
    body['ErAttachmentName'] = request.erAttachmentName;
  }
  if (!Util.isUnset(request.erId)) {
    body['ErId'] = request.erId;
  }
  if (!Util.isUnset(request.instanceId)) {
    body['InstanceId'] = request.instanceId;
  }
  if (!Util.isUnset(request.instanceType)) {
    body['InstanceType'] = request.instanceType;
  }
  if (!Util.isUnset(request.regionId)) {
    body['RegionId'] = request.regionId;
  }
  if (!Util.isUnset(request.resourceTenantId)) {
    body['ResourceTenantId'] = request.resourceTenantId;
  }
  var req = new OpenApi.OpenApiRequest{ 
    body = OpenApiUtil.parseToMap(body),
  };
  var params = new OpenApi.Params{
    action = 'CreateErAttachment',
    version = '2022-05-30',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'POST',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Create a network instance connection.
 *
 * @description When you call this operation to create a network instance connection, note that:
 * *   Make sure that you have created a Lingjun HUB instance.
 * *   Make sure that you have sufficient quota for network instance connections.
 * *   This operation is an asynchronous operation. After you call this operation, the system returns the ID of the network instance connection. In this case, the network instance connection may not be created yet, and the system is still creating the network instance in the background. You can query the connection status of a network instance by ListErAttachments or GetErAttachment:
 *     *   If the connection status of the network instance is Executing, the network instance is being created.
 *     *   If the connection status of the network instance is Available, the network instance is created.
 *
 * @param request CreateErAttachmentRequest
 * @return CreateErAttachmentResponse
 */
async function createErAttachment(request: CreateErAttachmentRequest): CreateErAttachmentResponse {
  var runtime = new Util.RuntimeOptions{};
  return createErAttachmentWithOptions(request, runtime);
}

model CreateErRouteMapRequest {
  description?: string(name='Description', description='Policy description', example='terraform-example'),
  destinationCidrBlock?: string(name='DestinationCidrBlock', description='Destination CIDR Block', example='0.0.0.0/0'),
  erId?: string(name='ErId', description='Lingjun HUB ID

This parameter is required.', example='er-aueyxxsy'),
  receptionInstanceId?: string(name='ReceptionInstanceId', description='The ID of the destination instance.

This parameter is required.', example='vpd-xlhsvdvt'),
  receptionInstanceOwner?: string(name='ReceptionInstanceOwner', description='The tenant to which the route receiving instance belongs.', example='1620939556166277'),
  receptionInstanceType?: string(name='ReceptionInstanceType', description='The type of the destination instance. Valid values:

*   **VPD**: Lingjun network segment.
*   **VCC**: Lingjun Connection.

This parameter is required.', example='VPD'),
  regionId?: string(name='RegionId', description='The region ID.

This parameter is required.', example='cn-wulanchabu'),
  routeMapAction?: string(name='RouteMapAction', description='Policy behavior; optional values:

*   **permit**: Allow
*   **deny**: Rejected

This parameter is required.', example='permit'),
  routeMapNum?: int32(name='RouteMapNum', description='The ID of the policy.

A smaller sequence number indicates a lower priority. When a route is matched, a policy with a higher priority is preferentially matched.

**Valid values: 1001 to 2000**

This parameter is required.', example='1001'),
  transmissionInstanceId?: string(name='TransmissionInstanceId', description='The ID of the source instance.

This parameter is required.', example='vpd-xlsjsdvt'),
  transmissionInstanceOwner?: string(name='TransmissionInstanceOwner', description='The tenant to which the route publish instance belongs', example='1620939556166277'),
  transmissionInstanceType?: string(name='TransmissionInstanceType', description='The type of the source instance. Valid values:

*   **VPD**: Lingjun network segment.
*   **VCC**: Lingjun Connection.

This parameter is required.', example='VPD'),
}

model CreateErRouteMapResponseBody = {
  accessDeniedDetail?: string(name='AccessDeniedDetail', description='The details about the access denial. This parameter is returned only if Resource Access Management (RAM) authentication failed.', example='None'),
  code?: int32(name='Code', description='The response status code.', example='0'),
  content?: {
    erRouteMapId?: string(name='ErRouteMapId', description='routing policy ID', example='er-rmap-uwglhzom'),
  }(name='Content', description='The response parameters.'),
  message?: string(name='Message', description='The error message. (If the instance is in the Exception state, the exception cause is prompted.)', example='success'),
  requestId?: string(name='RequestId', description='The request ID.', example='039C3C3A-3C37-5672-80D5-D8CD48C676D1'),
}

model CreateErRouteMapResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: CreateErRouteMapResponseBody(name='body'),
}

/**
 * @summary Users can use this API to create routing policy by specifying the network instance connection under Lingjun HUB.
 *
 * @description When you call this operation to create a routing policy, note that:
 * *   Make sure that you have created a Lingjun HUB instance.
 * *   Make sure that you have created a network instance connection.
 * *   This operation is an asynchronous operation. After you call this operation, the system returns the ID of the routing policy. In this case, the routing policy instance may not be created yet, and the system background creation task is still in progress. You can use ListErRouteMaps or GetErRouteMap to query the status of a routing policy.
 *     *   If the status of the routing policy is Execute, the system is creating the instance.
 *     *   If the status of the routing policy is Available, the creation is successful.
 *
 * @param request CreateErRouteMapRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return CreateErRouteMapResponse
 */
async function createErRouteMapWithOptions(request: CreateErRouteMapRequest, runtime: Util.RuntimeOptions): CreateErRouteMapResponse {
  Util.validateModel(request);
  var body : map[string]any = {};
  if (!Util.isUnset(request.description)) {
    body['Description'] = request.description;
  }
  if (!Util.isUnset(request.destinationCidrBlock)) {
    body['DestinationCidrBlock'] = request.destinationCidrBlock;
  }
  if (!Util.isUnset(request.erId)) {
    body['ErId'] = request.erId;
  }
  if (!Util.isUnset(request.receptionInstanceId)) {
    body['ReceptionInstanceId'] = request.receptionInstanceId;
  }
  if (!Util.isUnset(request.receptionInstanceOwner)) {
    body['ReceptionInstanceOwner'] = request.receptionInstanceOwner;
  }
  if (!Util.isUnset(request.receptionInstanceType)) {
    body['ReceptionInstanceType'] = request.receptionInstanceType;
  }
  if (!Util.isUnset(request.regionId)) {
    body['RegionId'] = request.regionId;
  }
  if (!Util.isUnset(request.routeMapAction)) {
    body['RouteMapAction'] = request.routeMapAction;
  }
  if (!Util.isUnset(request.routeMapNum)) {
    body['RouteMapNum'] = request.routeMapNum;
  }
  if (!Util.isUnset(request.transmissionInstanceId)) {
    body['TransmissionInstanceId'] = request.transmissionInstanceId;
  }
  if (!Util.isUnset(request.transmissionInstanceOwner)) {
    body['TransmissionInstanceOwner'] = request.transmissionInstanceOwner;
  }
  if (!Util.isUnset(request.transmissionInstanceType)) {
    body['TransmissionInstanceType'] = request.transmissionInstanceType;
  }
  var req = new OpenApi.OpenApiRequest{ 
    body = OpenApiUtil.parseToMap(body),
  };
  var params = new OpenApi.Params{
    action = 'CreateErRouteMap',
    version = '2022-05-30',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'POST',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Users can use this API to create routing policy by specifying the network instance connection under Lingjun HUB.
 *
 * @description When you call this operation to create a routing policy, note that:
 * *   Make sure that you have created a Lingjun HUB instance.
 * *   Make sure that you have created a network instance connection.
 * *   This operation is an asynchronous operation. After you call this operation, the system returns the ID of the routing policy. In this case, the routing policy instance may not be created yet, and the system background creation task is still in progress. You can use ListErRouteMaps or GetErRouteMap to query the status of a routing policy.
 *     *   If the status of the routing policy is Execute, the system is creating the instance.
 *     *   If the status of the routing policy is Available, the creation is successful.
 *
 * @param request CreateErRouteMapRequest
 * @return CreateErRouteMapResponse
 */
async function createErRouteMap(request: CreateErRouteMapRequest): CreateErRouteMapResponse {
  var runtime = new Util.RuntimeOptions{};
  return createErRouteMapWithOptions(request, runtime);
}

model CreateSubnetRequest {
  cidr?: string(name='Cidr', description='The CIDR block of the Subnet.

*   The network segment of the subnet must be a proper subset of the network segment of Lingjun to which it belongs, and the mask must be between 16 bits and 29 bits, which can provide 8 to 65536 addresses. For example, the CIDR block of the Lingjun CIDR block is 192.168.0.0/16, and the CIDR blocks of the subnets under the Lingjun CIDR block are 192.168.0.0/17 to 192.168.0.0/29.
*   The first and last three IP addresses of each subnet segment are reserved by the system. For example, the CIDR blocks of the subnet are 192.168.1.0/24,192.168.1.0, 192.168.1.253, 192.168.1.254, and 192.168.1.255.

This parameter is required.', example='10.0.0.0/16'),
  regionId?: string(name='RegionId', description='The region ID.

This parameter is required.', example='cn-wulanchabu'),
  subnetName?: string(name='SubnetName', description='Lingjun subnet instance name

This parameter is required.', example='subnet-1'),
  tag?: [ 
    {
      key?: string(name='Key', description='The tag key of the VPN attachment.

You cannot specify an empty string as a tag key. It can be up to 64 characters in length and cannot start with aliyun or acs:. It cannot contain http:// or https://.

You can specify at most 20 tag keys in each call.', example='tag-subnet'),
      value?: string(name='Value', description='The tag value of the VPN connection.

The tag value can be empty or a string of up to 128 characters. It cannot start with aliyun or acs:, and cannot contain http:// or https://.

Each key-value pair must be unique. You can specify values for at most 20 tag keys in each call.', example='subnet-tag-1'),
    }
  ](name='Tag', description='The tag information.

You can specify up to 20 tags.'),
  type?: string(name='Type', description='Lingjun Subnet Usage Type; optional; optional. Valid values:

*   **If you do not set this field for a common type**
*   **OOB** :OOB type
*   **LB**: LB type', example='OOB'),
  vpdId?: string(name='VpdId', description='The ID of the Lingjun CIDR block.

This parameter is required.', example='vpd-xcuhjyrj'),
  zoneId?: string(name='ZoneId', description='The zone ID.

This parameter is required.', example='cn-wulanchabu-b'),
}

model CreateSubnetResponseBody = {
  accessDeniedDetail?: string(name='AccessDeniedDetail', description='The detailed information about the failed permission verification.', example='None'),
  code?: int32(name='Code', description='The response status code.', example='0'),
  content?: {
    subnetId?: string(name='SubnetId', description='Lingjun subnet instance ID', example='subnet-yuvn29bn'),
  }(name='Content', description='The response parameters.'),
  message?: string(name='Message', description='The error message. (If the instance is in the Exception state, the exception cause is prompted.)', example='success'),
  requestId?: string(name='RequestId', description='The request ID, which is used to locate and troubleshoot issues.', example='A88DFED5-24B7-5A3E-87DE-380BF06F3C90'),
}

model CreateSubnetResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: CreateSubnetResponseBody(name='body'),
}

/**
 * @summary Users can use this API to create a Lingjun subnet under the Lingjun network segment.
 *
 * @description When you call this operation to create a Lingjun subnet, note that:
 * *   You have created a Lingjun CIDR block.
 * *   Only one network segment can be specified for a Lingjun subnet.
 * *   The network segment cannot be modified after the Lingjun subnet is created.
 * *   Make sure that you have sufficient Lingjun subnet quota.
 * *   This interface is an asynchronous interface. After calling this interface, the system will return the ID of a Lingjun subnet. At this time, the Lingjun network segment may not be created yet, and the system background creation task is still in progress. You can call the ListSubnets or GetSubnet operation to query the status of the CIDR block of Lingjun.
 *     *   If the status of the Lingjun subnet is Executed, it indicates that it is being created.
 *     *   If the status of the Lingjun subnet is Available, the creation is successful.
 *
 * @param request CreateSubnetRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return CreateSubnetResponse
 */
async function createSubnetWithOptions(request: CreateSubnetRequest, runtime: Util.RuntimeOptions): CreateSubnetResponse {
  Util.validateModel(request);
  var body : map[string]any = {};
  if (!Util.isUnset(request.cidr)) {
    body['Cidr'] = request.cidr;
  }
  if (!Util.isUnset(request.regionId)) {
    body['RegionId'] = request.regionId;
  }
  if (!Util.isUnset(request.subnetName)) {
    body['SubnetName'] = request.subnetName;
  }
  if (!Util.isUnset(request.tag)) {
    body['Tag'] = request.tag;
  }
  if (!Util.isUnset(request.type)) {
    body['Type'] = request.type;
  }
  if (!Util.isUnset(request.vpdId)) {
    body['VpdId'] = request.vpdId;
  }
  if (!Util.isUnset(request.zoneId)) {
    body['ZoneId'] = request.zoneId;
  }
  var req = new OpenApi.OpenApiRequest{ 
    body = OpenApiUtil.parseToMap(body),
  };
  var params = new OpenApi.Params{
    action = 'CreateSubnet',
    version = '2022-05-30',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'POST',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Users can use this API to create a Lingjun subnet under the Lingjun network segment.
 *
 * @description When you call this operation to create a Lingjun subnet, note that:
 * *   You have created a Lingjun CIDR block.
 * *   Only one network segment can be specified for a Lingjun subnet.
 * *   The network segment cannot be modified after the Lingjun subnet is created.
 * *   Make sure that you have sufficient Lingjun subnet quota.
 * *   This interface is an asynchronous interface. After calling this interface, the system will return the ID of a Lingjun subnet. At this time, the Lingjun network segment may not be created yet, and the system background creation task is still in progress. You can call the ListSubnets or GetSubnet operation to query the status of the CIDR block of Lingjun.
 *     *   If the status of the Lingjun subnet is Executed, it indicates that it is being created.
 *     *   If the status of the Lingjun subnet is Available, the creation is successful.
 *
 * @param request CreateSubnetRequest
 * @return CreateSubnetResponse
 */
async function createSubnet(request: CreateSubnetRequest): CreateSubnetResponse {
  var runtime = new Util.RuntimeOptions{};
  return createSubnetWithOptions(request, runtime);
}

model CreateVccRequest {
  accessCouldService?: boolean(name='AccessCouldService', description='Enabled access to cloud services. Optional values:

*   **true**: Enable access to cloud services
*   **false**: Do not enable access to cloud services', example='true'),
  bandwidth?: int32(name='Bandwidth', description='The bandwidth. Unit: Mbit /s. The minimum value is 1000, representing 1Gbps bandwidth; the maximum value is 400000, representing 400Gbps bandwidth.

>  1Gbps = 1000Mbps', example='1000'),
  bgpAsn?: long(name='BgpAsn', description='bgp as number', example='bgpAsn'),
  bgpCidr?: string(name='BgpCidr', description='Internet segment, on-premises input, off-premises default', example='10.0.0.0/24'),
  cenId?: string(name='CenId', description='CEN Instance ID', example='cen-bkiw0x1347roekr7f2'),
  cenOwnerId?: string(name='CenOwnerId', description='Account to which cen belongs', example='1511928242963727'),
  connectionType?: string(name='ConnectionType', description='The connection mode. Valid values:

*   **VPC**
*   **CEN (CENTR)**', example='CENTR'),
  description?: string(name='Description', description='The description of the document.', example='Description'),
  regionId?: string(name='RegionId', description='The region ID.', example='cn-wulanchabu'),
  resourceGroupId?: string(name='ResourceGroupId', description='The resource group ID.

For more information about resource groups, see [Resource groups](https://help.aliyun.com/document_detail/94475.htm?spm=a2c4g.11186623.0.0.29e15d7akXhpuu).', example='rg-aeky5f3qx6ceapq'),
  tag?: [ 
    {
      key?: string(name='Key', description='The tag key of the VPN attachment.

You cannot specify an empty string as a tag key. It can be up to 64 characters in length and cannot start with aliyun or acs:. It cannot contain http:// or https://.

You can specify at most 20 tag keys in each call.', example='tag-vcc'),
      value?: string(name='Value', description='The tag value of the VPN connection.

The tag value can be empty or a string of up to 128 characters. It cannot start with aliyun or acs:, and cannot contain http:// or https://.

Each key-value pair must be unique. You can specify values for at most 20 tag keys in each call.', example='vcc-group-1'),
    }
  ](name='Tag', description='The tag information.

You can specify up to 20 tags.'),
  vSwitchId?: string(name='VSwitchId', description='The ID of the vSwitch. [Virtual Private Cloud VSwitch](https://help.aliyun.com/document_detail/100380.html).

You can call the [DescribeVSwitches](https://help.aliyun.com/document_detail/35748.html) operation to query created vSwitches.', example='vsw-t4nahb0pxckgktx1kot8q'),
  vccId?: string(name='VccId', description='The ID of the Lingjun connection instance.', example='vcc-cn-zvp2w222001'),
  vccName?: string(name='VccName', description='Lingjun Connection Name', example='test'),
  vpcId?: string(name='VpcId', description='Virtual Private Cloud IDs; [What is Virtual Private Cloud](https://help.aliyun.com/document_detail/34217.html)

You can call the [DescribeVpcs](https://help.aliyun.com/document_detail/35739.html#demo-0) operation to query the specified VPC.', example='vpc-uf6aa4ddo97frj22tgp52'),
  vpdId?: string(name='VpdId', description='Lingjun CIDR block instance ID', example='vpd-t2jseldp'),
  zoneId?: string(name='ZoneId', description='The zone ID of the disk.', example='cn-wulanchabu-a'),
}

model CreateVccResponseBody = {
  accessDeniedDetail?: string(name='AccessDeniedDetail', description='The detailed information about the failed permission verification.', example='None'),
  code?: int32(name='Code', description='The response status code.', example='0'),
  content?: {
    vccId?: string(name='VccId', description='The ID of the Lingjun connection instance.', example='vcc-cn-zvp2w222001'),
  }(name='Content', description='The returned data.'),
  message?: string(name='Message', description='response message, if the success request is', example='success'),
  requestId?: string(name='RequestId', description='Request ID of the current request', example='039C3C3A-3C37-5672-80D5-D8CD48C676D1'),
}

model CreateVccResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: CreateVccResponseBody(name='body'),
}

/**
 * @summary You can create a Lingjun connection to connect Lingjun network environment and Alibaba Cloud network environment.
 *
 * @description When you call this operation to create a Lingjun connection, note that:
 * *   When you specify the vccId parameter, the system will configure the purchased Lingjun connection for you. When the default vccId parameter is set, the system will automatically place an order and configure the Lingjun connection for you.
 * *   Make sure that you have called the InitializeVcc operation to grant permissions.
 * *   This interface is an asynchronous interface. After this interface is called, the system will return the Lingjun connection ID, but the Lingjun connection instance may not be created yet, and the system background creation task is still in progress. You can call the ListVccs or GetVcc operation to query the status of the Lingjun connection.
 *     *   If the status of the Lingjun connection is Executed, the Lingjun connection is being created.
 *     *   If the status of the Lingjun connection is Available, the Lingjun connection is created.
 *
 * @param request CreateVccRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return CreateVccResponse
 */
async function createVccWithOptions(request: CreateVccRequest, runtime: Util.RuntimeOptions): CreateVccResponse {
  Util.validateModel(request);
  var body : map[string]any = {};
  if (!Util.isUnset(request.accessCouldService)) {
    body['AccessCouldService'] = request.accessCouldService;
  }
  if (!Util.isUnset(request.bandwidth)) {
    body['Bandwidth'] = request.bandwidth;
  }
  if (!Util.isUnset(request.bgpAsn)) {
    body['BgpAsn'] = request.bgpAsn;
  }
  if (!Util.isUnset(request.bgpCidr)) {
    body['BgpCidr'] = request.bgpCidr;
  }
  if (!Util.isUnset(request.cenId)) {
    body['CenId'] = request.cenId;
  }
  if (!Util.isUnset(request.cenOwnerId)) {
    body['CenOwnerId'] = request.cenOwnerId;
  }
  if (!Util.isUnset(request.connectionType)) {
    body['ConnectionType'] = request.connectionType;
  }
  if (!Util.isUnset(request.description)) {
    body['Description'] = request.description;
  }
  if (!Util.isUnset(request.regionId)) {
    body['RegionId'] = request.regionId;
  }
  if (!Util.isUnset(request.resourceGroupId)) {
    body['ResourceGroupId'] = request.resourceGroupId;
  }
  if (!Util.isUnset(request.tag)) {
    body['Tag'] = request.tag;
  }
  if (!Util.isUnset(request.vSwitchId)) {
    body['VSwitchId'] = request.vSwitchId;
  }
  if (!Util.isUnset(request.vccId)) {
    body['VccId'] = request.vccId;
  }
  if (!Util.isUnset(request.vccName)) {
    body['VccName'] = request.vccName;
  }
  if (!Util.isUnset(request.vpcId)) {
    body['VpcId'] = request.vpcId;
  }
  if (!Util.isUnset(request.vpdId)) {
    body['VpdId'] = request.vpdId;
  }
  if (!Util.isUnset(request.zoneId)) {
    body['ZoneId'] = request.zoneId;
  }
  var req = new OpenApi.OpenApiRequest{ 
    body = OpenApiUtil.parseToMap(body),
  };
  var params = new OpenApi.Params{
    action = 'CreateVcc',
    version = '2022-05-30',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'POST',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary You can create a Lingjun connection to connect Lingjun network environment and Alibaba Cloud network environment.
 *
 * @description When you call this operation to create a Lingjun connection, note that:
 * *   When you specify the vccId parameter, the system will configure the purchased Lingjun connection for you. When the default vccId parameter is set, the system will automatically place an order and configure the Lingjun connection for you.
 * *   Make sure that you have called the InitializeVcc operation to grant permissions.
 * *   This interface is an asynchronous interface. After this interface is called, the system will return the Lingjun connection ID, but the Lingjun connection instance may not be created yet, and the system background creation task is still in progress. You can call the ListVccs or GetVcc operation to query the status of the Lingjun connection.
 *     *   If the status of the Lingjun connection is Executed, the Lingjun connection is being created.
 *     *   If the status of the Lingjun connection is Available, the Lingjun connection is created.
 *
 * @param request CreateVccRequest
 * @return CreateVccResponse
 */
async function createVcc(request: CreateVccRequest): CreateVccResponse {
  var runtime = new Util.RuntimeOptions{};
  return createVccWithOptions(request, runtime);
}

model CreateVccGrantRuleRequest {
  erId?: string(name='ErId', description='Lingjun HUB ID

This parameter is required.', example='er-kkopgtne'),
  grantTenantId?: string(name='GrantTenantId', description='Authorized Tenant ID

This parameter is required.', example='1620939556166277'),
  instanceId?: string(name='InstanceId', description='Network Instance ID

This parameter is required.', example='vcc-8rgvqazb'),
  regionId?: string(name='RegionId', description='The region ID.

This parameter is required.', example='cn-wulanchabu'),
}

model CreateVccGrantRuleResponseBody = {
  accessDeniedDetail?: string(name='AccessDeniedDetail', description='The details about the access denial. This parameter is returned only if Resource Access Management (RAM) permission verification failed.', example='None'),
  code?: int32(name='Code', description='The response status code.', example='0'),
  content?: {
    grantRuleId?: string(name='GrantRuleId', description='Authorized resource primary key ID', example='grant-rule-8rgvqazb'),
  }(name='Content', description='The response parameters.', example='{}'),
  message?: string(name='Message', description='The error message. (If the instance is in the Exception state, the exception cause is prompted.)', example='success'),
  requestId?: string(name='RequestId', description='Request ID of the current request', example='AC8C713A-A9F4-5984-A5E1-76496DF35153'),
}

model CreateVccGrantRuleResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: CreateVccGrantRuleResponseBody(name='body'),
}

/**
 * @summary Users can use this API to connect Lingjun instance to the Lingjun HUB instance of the target account. After authorization, the target account can be associated with your Lingjun connection by using the authorized Lingjun HUB instance.
 *
 * @description When you call this operation to create cross-account authorization for Lingjun HUB, note that:
 * *   Make sure that the Alibaba Cloud ID and Lingjun HUB instance that you want to authorize are correct.
 * *   If you authorize the account of the other party, the account of the other party can load your local network instance to its Lingjun HUB, and the other party\\"s network will be connected to your network. Please proceed with caution.
 *
 * @param request CreateVccGrantRuleRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return CreateVccGrantRuleResponse
 */
async function createVccGrantRuleWithOptions(request: CreateVccGrantRuleRequest, runtime: Util.RuntimeOptions): CreateVccGrantRuleResponse {
  Util.validateModel(request);
  var body : map[string]any = {};
  if (!Util.isUnset(request.erId)) {
    body['ErId'] = request.erId;
  }
  if (!Util.isUnset(request.grantTenantId)) {
    body['GrantTenantId'] = request.grantTenantId;
  }
  if (!Util.isUnset(request.instanceId)) {
    body['InstanceId'] = request.instanceId;
  }
  if (!Util.isUnset(request.regionId)) {
    body['RegionId'] = request.regionId;
  }
  var req = new OpenApi.OpenApiRequest{ 
    body = OpenApiUtil.parseToMap(body),
  };
  var params = new OpenApi.Params{
    action = 'CreateVccGrantRule',
    version = '2022-05-30',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'POST',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Users can use this API to connect Lingjun instance to the Lingjun HUB instance of the target account. After authorization, the target account can be associated with your Lingjun connection by using the authorized Lingjun HUB instance.
 *
 * @description When you call this operation to create cross-account authorization for Lingjun HUB, note that:
 * *   Make sure that the Alibaba Cloud ID and Lingjun HUB instance that you want to authorize are correct.
 * *   If you authorize the account of the other party, the account of the other party can load your local network instance to its Lingjun HUB, and the other party\\"s network will be connected to your network. Please proceed with caution.
 *
 * @param request CreateVccGrantRuleRequest
 * @return CreateVccGrantRuleResponse
 */
async function createVccGrantRule(request: CreateVccGrantRuleRequest): CreateVccGrantRuleResponse {
  var runtime = new Util.RuntimeOptions{};
  return createVccGrantRuleWithOptions(request, runtime);
}

model CreateVccRouteEntryRequest {
  destinationCidrBlock?: string(name='DestinationCidrBlock', description='Destination CIDR block', example='192.168.98.112/28'),
  regionId?: string(name='RegionId', description='The region ID.', example='cn-wulanchabu'),
  vccId?: string(name='VccId', description='The ID of the Lingjun connection instance.', example='vcc-cn-zvp2w222001'),
}

model CreateVccRouteEntryResponseBody = {
  accessDeniedDetail?: string(name='AccessDeniedDetail', description='The detailed information about the failed permission verification.', example='None'),
  code?: int32(name='Code', description='The response status code.', example='0'),
  content?: {
    vccRouteEntryId?: string(name='VccRouteEntryId', description='The ID of the route entry.', example='vcc-rte-5cey1sap'),
  }(name='Content', description='The returned data.'),
  message?: string(name='Message', description='The returned message.', example='success'),
  requestId?: string(name='RequestId', description='The request ID.', example='039C3C3A-3C37-5672-80D5-D8CD48C676D1'),
}

model CreateVccRouteEntryResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: CreateVccRouteEntryResponseBody(name='body'),
}

/**
 * @summary Create a Lingjun connection route entry.
 *
 * @description When you call this operation to create a VBR route entry, take note of the following items:
 * *   After you call this operation, static route entries and BGP network announcements are created on the VBR to which the Lingjun connection belongs.
 * *   This operation is an asynchronous operation. After you call this operation, the VBR static route entry may not be created yet, and the system still creates the static route entry in the background. You can query the status of VBR static route entries by ListVccRouteEntries or GetVccRouteEntry:
 *     *   If the VBR static route entry is in the Executing state, it indicates that it is being created.
 *     *   If the status of the VBR static route entry is Available, the VBR is created.
 *
 * @param request CreateVccRouteEntryRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return CreateVccRouteEntryResponse
 */
async function createVccRouteEntryWithOptions(request: CreateVccRouteEntryRequest, runtime: Util.RuntimeOptions): CreateVccRouteEntryResponse {
  Util.validateModel(request);
  var body : map[string]any = {};
  if (!Util.isUnset(request.destinationCidrBlock)) {
    body['DestinationCidrBlock'] = request.destinationCidrBlock;
  }
  if (!Util.isUnset(request.regionId)) {
    body['RegionId'] = request.regionId;
  }
  if (!Util.isUnset(request.vccId)) {
    body['VccId'] = request.vccId;
  }
  var req = new OpenApi.OpenApiRequest{ 
    body = OpenApiUtil.parseToMap(body),
  };
  var params = new OpenApi.Params{
    action = 'CreateVccRouteEntry',
    version = '2022-05-30',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'POST',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Create a Lingjun connection route entry.
 *
 * @description When you call this operation to create a VBR route entry, take note of the following items:
 * *   After you call this operation, static route entries and BGP network announcements are created on the VBR to which the Lingjun connection belongs.
 * *   This operation is an asynchronous operation. After you call this operation, the VBR static route entry may not be created yet, and the system still creates the static route entry in the background. You can query the status of VBR static route entries by ListVccRouteEntries or GetVccRouteEntry:
 *     *   If the VBR static route entry is in the Executing state, it indicates that it is being created.
 *     *   If the status of the VBR static route entry is Available, the VBR is created.
 *
 * @param request CreateVccRouteEntryRequest
 * @return CreateVccRouteEntryResponse
 */
async function createVccRouteEntry(request: CreateVccRouteEntryRequest): CreateVccRouteEntryResponse {
  var runtime = new Util.RuntimeOptions{};
  return createVccRouteEntryWithOptions(request, runtime);
}

model CreateVpdRequest {
  cidr?: string(name='Cidr', description='The CIDR block of the VPD.

*   We recommend that you use an RFC private endpoint as the Lingjun CIDR block, such as 10.0.0.0/8,172.16.0.0/12,192.168.0.0/16. In scenarios where the Doringjun CIDR block is connected to each other or where the Lingjun CIDR block is connected to a VPC, make sure that the addresses do not conflict with each other.
*   You can also use a custom CIDR block other than 100.64.0.0/10, 224.0.0.0/4, 127.0.0.0/8, or 169.254.0.0/16 and their subnets as the primary IPv4 CIDR block of the VPD.

This parameter is required.', example='10.0.0.0/8'),
  regionId?: string(name='RegionId', description='The region ID of the disk.

This parameter is required.', example='cn-wulanchabu'),
  resourceGroupId?: string(name='ResourceGroupId', description='The resource group ID.

For more information about resource groups, see [Resource groups](https://help.aliyun.com/document_detail/94475.htm?spm=a2c4g.11186623.0.0.29e15d7akXhpuu).', example='rg-aek2l4sq6l7unhi'),
  subnets?: [ 
    {
      cidr?: string(name='Cidr', description='The CIDR block of the Subnet.

*   The network segment of the subnet must be a proper subset of the network segment of Lingjun to which it belongs, and the mask must be between 16 bits and 29 bits, which can provide 8 to 65536 addresses. For example, the CIDR block of the Lingjun CIDR block is 192.168.0.0/16, and the CIDR blocks of the subnets under the Lingjun CIDR block are 192.168.0.0/17 to 192.168.0.0/29.
*   The first and last three IP addresses of each subnet segment are reserved by the system. For example, the CIDR blocks of the subnet are 192.168.1.0/24,192.168.1.0, 192.168.1.253, 192.168.1.254, and 192.168.1.255.', example='10.1.0.0/16'),
      regionId?: string(name='RegionId', description='The region in which the instance resides.', example='cn-wulanchabu'),
      subnetName?: string(name='SubnetName', description='Lingjun subnet instance name', example='subnet-1'),
      type?: string(name='Type', description='Lingjun Subnet Usage Type; optional; optional. Valid values:

*   **Generic type is not specified**.
*   **OOB** :OOB type
*   **LB**: LB type', example='OOB'),
      zoneId?: string(name='ZoneId', description='The zone ID of the disk.', example='cn-wulanchabu-b'),
    }
  ](name='Subnets', description='Lingjun subnet information list'),
  tag?: [ 
    {
      key?: string(name='Key', description='The tag key of the VPN attachment.

You cannot specify an empty string as a tag key. It can be up to 64 characters in length and cannot start with aliyun or acs:. It cannot contain http:// or https://.

You can specify at most 20 tag keys in each call.', example='vpd-wulanchabu'),
      value?: string(name='Value', description='The tag value of the VPN connection.

The tag value can be empty or a string of up to 128 characters. It cannot start with aliyun or acs:, and cannot contain http:// or https://.

Each tag key corresponds to a tag value. You can enter a maximum of 20 tag values at a time.', example='wulanchabu-a'),
    }
  ](name='Tag', description='A tag.'),
  vpdName?: string(name='VpdName', description='Lingjun CIDR block instance name

This parameter is required.', example='vpd-1'),
}

model CreateVpdResponseBody = {
  accessDeniedDetail?: string(name='AccessDeniedDetail', description='The details about the failed permission verification.', example='None'),
  code?: int32(name='Code', description='The response status code.', example='0'),
  content?: {
    subnetIds?: [ string ](name='SubnetIds', description='Lingjun subnet ID list'),
    vpdId?: string(name='VpdId', description='Lingjun CIDR block instance ID', example='vpd-eoiy88ju'),
  }(name='Content', description='The response parameters.'),
  message?: string(name='Message', description='The returned message.', example='SUCCESS'),
  requestId?: string(name='RequestId', description='The request ID.', example='DBAD15D6-3F47-5B36-8A92-57C2919D13D0'),
}

model CreateVpdResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: CreateVpdResponseBody(name='body'),
}

/**
 * @summary Create a private Lingjun CIDR block. This CIDR block has an independent network environment.
 *
 * @description When you call this operation to create a CIDR block for Lingjun, take note of the following:
 * *   A Lingjun network segment can specify an additional network segment in addition to a main network segment.
 * *   After the Lingjun network segment is created, the network segment cannot be modified.
 * *   Make sure that you have a sufficient quota of Lingjun CIDR blocks.
 * *   This interface is an asynchronous interface. After calling this interface, the system will return the ID of a Lingjun network segment. At this time, the Lingjun network segment may not be created yet, and the system background creation task is still in progress. You can call the ListVpds or GetVpd operation to query the status of the CIDR block of Lingjun.
 *     *   If the status of the Lingjun CIDR block is Executed, the CIDR block is being created.
 *     *   If the status of the Lingjun CIDR block is Available, the creation is successful.
 *
 * @param request CreateVpdRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return CreateVpdResponse
 */
async function createVpdWithOptions(request: CreateVpdRequest, runtime: Util.RuntimeOptions): CreateVpdResponse {
  Util.validateModel(request);
  var body : map[string]any = {};
  if (!Util.isUnset(request.cidr)) {
    body['Cidr'] = request.cidr;
  }
  if (!Util.isUnset(request.regionId)) {
    body['RegionId'] = request.regionId;
  }
  if (!Util.isUnset(request.resourceGroupId)) {
    body['ResourceGroupId'] = request.resourceGroupId;
  }
  if (!Util.isUnset(request.subnets)) {
    body['Subnets'] = request.subnets;
  }
  if (!Util.isUnset(request.tag)) {
    body['Tag'] = request.tag;
  }
  if (!Util.isUnset(request.vpdName)) {
    body['VpdName'] = request.vpdName;
  }
  var req = new OpenApi.OpenApiRequest{ 
    body = OpenApiUtil.parseToMap(body),
  };
  var params = new OpenApi.Params{
    action = 'CreateVpd',
    version = '2022-05-30',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'POST',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Create a private Lingjun CIDR block. This CIDR block has an independent network environment.
 *
 * @description When you call this operation to create a CIDR block for Lingjun, take note of the following:
 * *   A Lingjun network segment can specify an additional network segment in addition to a main network segment.
 * *   After the Lingjun network segment is created, the network segment cannot be modified.
 * *   Make sure that you have a sufficient quota of Lingjun CIDR blocks.
 * *   This interface is an asynchronous interface. After calling this interface, the system will return the ID of a Lingjun network segment. At this time, the Lingjun network segment may not be created yet, and the system background creation task is still in progress. You can call the ListVpds or GetVpd operation to query the status of the CIDR block of Lingjun.
 *     *   If the status of the Lingjun CIDR block is Executed, the CIDR block is being created.
 *     *   If the status of the Lingjun CIDR block is Available, the creation is successful.
 *
 * @param request CreateVpdRequest
 * @return CreateVpdResponse
 */
async function createVpd(request: CreateVpdRequest): CreateVpdResponse {
  var runtime = new Util.RuntimeOptions{};
  return createVpdWithOptions(request, runtime);
}

model CreateVpdGrantRuleRequest {
  erId?: string(name='ErId', description='Lingjun HUB ID

This parameter is required.', example='er-kkopgtne'),
  grantTenantId?: string(name='GrantTenantId', description='Authorized Tenant ID

This parameter is required.', example='1013666993027780'),
  instanceId?: string(name='InstanceId', description='Network Instance ID

This parameter is required.', example='vpd-8rgvqazb'),
  regionId?: string(name='RegionId', description='The region ID.

This parameter is required.', example='cn-wulanchabu'),
}

model CreateVpdGrantRuleResponseBody = {
  accessDeniedDetail?: string(name='AccessDeniedDetail', description='The details about the access denial.', example='None'),
  code?: int32(name='Code', description='The response status code.', example='0'),
  content?: {
    grantRuleId?: string(name='GrantRuleId', description='Authorized resource primary key ID', example='grant-rule-hnevjkmw'),
  }(name='Content', description='The response parameters.', example='{}'),
  message?: string(name='Message', description='The error message. (If the instance is in the Exception state, the exception cause is prompted.)', example='success'),
  requestId?: string(name='RequestId', description='Request ID of the current request', example='DBAD15D6-3F47-5B36-8A92-57C2919D13D0'),
}

model CreateVpdGrantRuleResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: CreateVpdGrantRuleResponseBody(name='body'),
}

/**
 * @summary Users can use this API to authorize Lingjun HUB instances of the target account. After authorization, the target account can be associated with your Lingjun CIDR block by using the authorized Lingjun HUB instance.
 *
 * @description When you call this operation to create cross-account authorization for Lingjun HUB, note that:
 * *   Make sure that the Alibaba Cloud ID and Lingjun HUB instance that you want to authorize are correct.
 * *   If you authorize the account of the other party, the account of the other party can load your local network instance to its Lingjun HUB, and the other party\\"s network will be connected to your network. Please proceed with caution.
 *
 * @param request CreateVpdGrantRuleRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return CreateVpdGrantRuleResponse
 */
async function createVpdGrantRuleWithOptions(request: CreateVpdGrantRuleRequest, runtime: Util.RuntimeOptions): CreateVpdGrantRuleResponse {
  Util.validateModel(request);
  var body : map[string]any = {};
  if (!Util.isUnset(request.erId)) {
    body['ErId'] = request.erId;
  }
  if (!Util.isUnset(request.grantTenantId)) {
    body['GrantTenantId'] = request.grantTenantId;
  }
  if (!Util.isUnset(request.instanceId)) {
    body['InstanceId'] = request.instanceId;
  }
  if (!Util.isUnset(request.regionId)) {
    body['RegionId'] = request.regionId;
  }
  var req = new OpenApi.OpenApiRequest{ 
    body = OpenApiUtil.parseToMap(body),
  };
  var params = new OpenApi.Params{
    action = 'CreateVpdGrantRule',
    version = '2022-05-30',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'POST',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Users can use this API to authorize Lingjun HUB instances of the target account. After authorization, the target account can be associated with your Lingjun CIDR block by using the authorized Lingjun HUB instance.
 *
 * @description When you call this operation to create cross-account authorization for Lingjun HUB, note that:
 * *   Make sure that the Alibaba Cloud ID and Lingjun HUB instance that you want to authorize are correct.
 * *   If you authorize the account of the other party, the account of the other party can load your local network instance to its Lingjun HUB, and the other party\\"s network will be connected to your network. Please proceed with caution.
 *
 * @param request CreateVpdGrantRuleRequest
 * @return CreateVpdGrantRuleResponse
 */
async function createVpdGrantRule(request: CreateVpdGrantRuleRequest): CreateVpdGrantRuleResponse {
  var runtime = new Util.RuntimeOptions{};
  return createVpdGrantRuleWithOptions(request, runtime);
}

model DeleteElasticNetworkInterfaceRequest {
  clientToken?: string(name='ClientToken', description='By default, popApi is not ignored and idempotent', example='141cccd6-dfbd-11ec-b8e8-0242ac110003'),
  elasticNetworkInterfaceId?: string(name='ElasticNetworkInterfaceId', description='Lingjun Elastic Network Interface ID

This parameter is required.', example='leni-1234****'),
  regionId?: string(name='RegionId', description='The region ID.

This parameter is required.', example='cn-wulanchabu'),
}

model DeleteElasticNetworkInterfaceResponseBody = {
  accessDeniedDetail?: string(name='AccessDeniedDetail', description='The details about the access denial.', example='None'),
  code?: int32(name='Code', description='The response status code.', example='0'),
  content?: {
    elasticNetworkInterfaceId?: string(name='ElasticNetworkInterfaceId', description='Lingjun Elastic Network Interface ID', example='leni-1234****'),
    nodeId?: string(name='NodeId', description='Lingjun Node ID', example='e01-cn-lbj3aej****'),
  }(name='Content', description='The response parameters.'),
  message?: string(name='Message', description='The return message.', example='success'),
  requestId?: string(name='RequestId', description='The ID of the request.', example='BDBCC783-84CA-5733-8EEA-645C88B9009C'),
}

model DeleteElasticNetworkInterfaceResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: DeleteElasticNetworkInterfaceResponseBody(name='body'),
}

/**
 * @summary Delete Lingjun Elastic Network Interface. After deletion, all relevant data will be lost and cannot be recovered. Please operate with caution.
 *
 * @param request DeleteElasticNetworkInterfaceRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return DeleteElasticNetworkInterfaceResponse
 */
async function deleteElasticNetworkInterfaceWithOptions(request: DeleteElasticNetworkInterfaceRequest, runtime: Util.RuntimeOptions): DeleteElasticNetworkInterfaceResponse {
  Util.validateModel(request);
  var body : map[string]any = {};
  if (!Util.isUnset(request.clientToken)) {
    body['ClientToken'] = request.clientToken;
  }
  if (!Util.isUnset(request.elasticNetworkInterfaceId)) {
    body['ElasticNetworkInterfaceId'] = request.elasticNetworkInterfaceId;
  }
  if (!Util.isUnset(request.regionId)) {
    body['RegionId'] = request.regionId;
  }
  var req = new OpenApi.OpenApiRequest{ 
    body = OpenApiUtil.parseToMap(body),
  };
  var params = new OpenApi.Params{
    action = 'DeleteElasticNetworkInterface',
    version = '2022-05-30',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'POST',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Delete Lingjun Elastic Network Interface. After deletion, all relevant data will be lost and cannot be recovered. Please operate with caution.
 *
 * @param request DeleteElasticNetworkInterfaceRequest
 * @return DeleteElasticNetworkInterfaceResponse
 */
async function deleteElasticNetworkInterface(request: DeleteElasticNetworkInterfaceRequest): DeleteElasticNetworkInterfaceResponse {
  var runtime = new Util.RuntimeOptions{};
  return deleteElasticNetworkInterfaceWithOptions(request, runtime);
}

model DeleteErRequest {
  erId?: string(name='ErId', description='Lingjun HUB Instance ID

This parameter is required.', example='er-kkopgtne'),
  regionId?: string(name='RegionId', description='The region ID.

This parameter is required.', example='cn-wulanchabu'),
}

model DeleteErResponseBody = {
  accessDeniedDetail?: string(name='AccessDeniedDetail', description='The details about the access denial.', example='{}'),
  code?: int32(name='Code', description='The response status code.', example='0'),
  content?: any(name='Content', description='Response body', example='{}'),
  message?: string(name='Message', description='The error message. (If the instance is in the Exception state, the exception cause is prompted.)', example='success'),
  requestId?: string(name='RequestId', description='Request ID of the current request', example='9C50C9CD-E799-54DA-BA7A-1FAF3DF80857'),
}

model DeleteErResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: DeleteErResponseBody(name='body'),
}

/**
 * @summary After you delete a Lingjun HUB instance, the related data is lost and cannot be recovered.
 *
 * @description When you call this operation to delete the Lingjun HUB, note that:
 * *   Before you delete the instance, make sure that no network instance is connected to the Lingjun HUB instance.
 * *   After deletion, all related data is lost and cannot be recovered. Exercise caution when performing this operation.
 * *   This interface is an asynchronous interface. After this interface is called, the Lingjun HUB instance may not be deleted, and the system background deletion task is still in progress. You can call the ListErs or GetEr operation to query the deletion status of the Lingjun HUB.
 *     *   If the status of the Lingjun HUB is Deleting, the Lingjun HUB instance is being deleted.
 *     *   If no Lingjun HUB instance is recorded, the Lingjun HUB instance has been deleted.
 *
 * @param request DeleteErRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return DeleteErResponse
 */
async function deleteErWithOptions(request: DeleteErRequest, runtime: Util.RuntimeOptions): DeleteErResponse {
  Util.validateModel(request);
  var body : map[string]any = {};
  if (!Util.isUnset(request.erId)) {
    body['ErId'] = request.erId;
  }
  if (!Util.isUnset(request.regionId)) {
    body['RegionId'] = request.regionId;
  }
  var req = new OpenApi.OpenApiRequest{ 
    body = OpenApiUtil.parseToMap(body),
  };
  var params = new OpenApi.Params{
    action = 'DeleteEr',
    version = '2022-05-30',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'POST',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary After you delete a Lingjun HUB instance, the related data is lost and cannot be recovered.
 *
 * @description When you call this operation to delete the Lingjun HUB, note that:
 * *   Before you delete the instance, make sure that no network instance is connected to the Lingjun HUB instance.
 * *   After deletion, all related data is lost and cannot be recovered. Exercise caution when performing this operation.
 * *   This interface is an asynchronous interface. After this interface is called, the Lingjun HUB instance may not be deleted, and the system background deletion task is still in progress. You can call the ListErs or GetEr operation to query the deletion status of the Lingjun HUB.
 *     *   If the status of the Lingjun HUB is Deleting, the Lingjun HUB instance is being deleted.
 *     *   If no Lingjun HUB instance is recorded, the Lingjun HUB instance has been deleted.
 *
 * @param request DeleteErRequest
 * @return DeleteErResponse
 */
async function deleteEr(request: DeleteErRequest): DeleteErResponse {
  var runtime = new Util.RuntimeOptions{};
  return deleteErWithOptions(request, runtime);
}

model DeleteErAttachmentRequest {
  erAttachmentId?: string(name='ErAttachmentId', description='The ID of the network connection instance.

This parameter is required.', example='er-attachment-5n3nsmvl'),
  erId?: string(name='ErId', description='Lingjun HUB Id

This parameter is required.', example='er-opy1wrfv'),
  regionId?: string(name='RegionId', description='The region ID.

This parameter is required.', example='cn-wulanchabu'),
}

model DeleteErAttachmentResponseBody = {
  accessDeniedDetail?: string(name='AccessDeniedDetail', description='访问被拒绝的详细原因。', example='None'),
  code?: int32(name='Code', description='The response status code.', example='0'),
  content?: any(name='Content', description='The response content. If a resource has dependent resources, the existing dependent resources are returned.', example='{
    "ER_RMAP": [
        {
            "erId": "er-opy1wrfv",
            "destinationCidrBlock": "0.0.0.0/0",
            "regionId": "cn-wulanchabu",
            "routeMapNum": 3000,
            "erRouteMapId": "er-rmap-v5lfhmvm",
            "action": "permit",
            "status": "Available"
        },
        {
            "erId": "er-opy1wrfv",
            "destinationCidrBlock": "0.0.0.0/0",
            "regionId": "cn-wulanchabu",
            "routeMapNum": 3000,
            "erRouteMapId": "er-rmap-of3r0ndh",
            "action": "permit",
            "status": "Available"
        }
    ]
}'),
  message?: string(name='Message', description='response message, if the success request is', example='success'),
  requestId?: string(name='RequestId', description='Request ID of the current request', example='A88DFED5-24B7-5A3E-87DE-380BF06F3C90'),
}

model DeleteErAttachmentResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: DeleteErAttachmentResponseBody(name='body'),
}

/**
 * @summary If you delete a network instance that is connected to an instance, the related data is lost and cannot be recovered.
 *
 * @description When you call this operation to delete a network instance connection, take note of the following:
 * *   Before you delete the instance, make sure that no routing policy exists under the network instance connection instance.
 * *   After deletion, all related data is lost and cannot be recovered. Exercise caution when performing this operation.
 * *   This operation is an asynchronous operation. After you call this operation, the network instance that is connected to the instance may not be deleted. The system still deletes the instance in the background. You can call the ListErAttachments or GetErAttachment to query the deletion status of network instance connections:
 *     *   If the status of the network instance connection is Deleting, the network instance connection is being deleted.
 *     *   If there is no connection record for the network instance, the connection to the network instance has been deleted.
 *
 * @param request DeleteErAttachmentRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return DeleteErAttachmentResponse
 */
async function deleteErAttachmentWithOptions(request: DeleteErAttachmentRequest, runtime: Util.RuntimeOptions): DeleteErAttachmentResponse {
  Util.validateModel(request);
  var body : map[string]any = {};
  if (!Util.isUnset(request.erAttachmentId)) {
    body['ErAttachmentId'] = request.erAttachmentId;
  }
  if (!Util.isUnset(request.erId)) {
    body['ErId'] = request.erId;
  }
  if (!Util.isUnset(request.regionId)) {
    body['RegionId'] = request.regionId;
  }
  var req = new OpenApi.OpenApiRequest{ 
    body = OpenApiUtil.parseToMap(body),
  };
  var params = new OpenApi.Params{
    action = 'DeleteErAttachment',
    version = '2022-05-30',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'POST',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary If you delete a network instance that is connected to an instance, the related data is lost and cannot be recovered.
 *
 * @description When you call this operation to delete a network instance connection, take note of the following:
 * *   Before you delete the instance, make sure that no routing policy exists under the network instance connection instance.
 * *   After deletion, all related data is lost and cannot be recovered. Exercise caution when performing this operation.
 * *   This operation is an asynchronous operation. After you call this operation, the network instance that is connected to the instance may not be deleted. The system still deletes the instance in the background. You can call the ListErAttachments or GetErAttachment to query the deletion status of network instance connections:
 *     *   If the status of the network instance connection is Deleting, the network instance connection is being deleted.
 *     *   If there is no connection record for the network instance, the connection to the network instance has been deleted.
 *
 * @param request DeleteErAttachmentRequest
 * @return DeleteErAttachmentResponse
 */
async function deleteErAttachment(request: DeleteErAttachmentRequest): DeleteErAttachmentResponse {
  var runtime = new Util.RuntimeOptions{};
  return deleteErAttachmentWithOptions(request, runtime);
}

model DeleteErRouteMapRequest {
  erId?: string(name='ErId', description='Lingjun HUB ID

This parameter is required.', example='er-kkopgtne'),
  erRouteMapIds?: [ string ](name='ErRouteMapIds', description='routing policy Instance ID List

This parameter is required.'),
  regionId?: string(name='RegionId', description='The region ID.

This parameter is required.', example='cn-wulanchabu'),
}

model DeleteErRouteMapResponseBody = {
  accessDeniedDetail?: string(name='AccessDeniedDetail', description='The details about the access denial.', example='None'),
  code?: int32(name='Code', description='The response status code.', example='0'),
  content?: any(name='Content', description='Response body', example='{}'),
  message?: string(name='Message', description='The error message. (If the instance is in the Exception state, the exception cause is prompted.)', example='success'),
  requestId?: string(name='RequestId', description='The request ID.', example='AC8C713A-A9F4-5984-A5E1-76496DF35153'),
}

model DeleteErRouteMapResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: DeleteErRouteMapResponseBody(name='body'),
}

/**
 * @summary If you delete a routing policy instance, the related data is lost and cannot be recovered.
 *
 * @description When you call this operation to delete a routing policy, note that:
 * *   After deletion, all related data is lost and cannot be recovered. Exercise caution when performing this operation.
 * *   This interface is an asynchronous interface. After this interface is called, the routing policy instance may not be deleted yet, and the system background deletion task is still in progress. You can call the ListErRouteMaps or GetErRouteMap operation to query the deletion status of a routing policy.
 *     *   If the routing policy is in the Deleting state, the routing policy instance is being deleted.
 *     *   If no routing policy instance is recorded, the routing policy instance has been deleted.
 *
 * @param request DeleteErRouteMapRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return DeleteErRouteMapResponse
 */
async function deleteErRouteMapWithOptions(request: DeleteErRouteMapRequest, runtime: Util.RuntimeOptions): DeleteErRouteMapResponse {
  Util.validateModel(request);
  var body : map[string]any = {};
  if (!Util.isUnset(request.erId)) {
    body['ErId'] = request.erId;
  }
  if (!Util.isUnset(request.erRouteMapIds)) {
    body['ErRouteMapIds'] = request.erRouteMapIds;
  }
  if (!Util.isUnset(request.regionId)) {
    body['RegionId'] = request.regionId;
  }
  var req = new OpenApi.OpenApiRequest{ 
    body = OpenApiUtil.parseToMap(body),
  };
  var params = new OpenApi.Params{
    action = 'DeleteErRouteMap',
    version = '2022-05-30',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'POST',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary If you delete a routing policy instance, the related data is lost and cannot be recovered.
 *
 * @description When you call this operation to delete a routing policy, note that:
 * *   After deletion, all related data is lost and cannot be recovered. Exercise caution when performing this operation.
 * *   This interface is an asynchronous interface. After this interface is called, the routing policy instance may not be deleted yet, and the system background deletion task is still in progress. You can call the ListErRouteMaps or GetErRouteMap operation to query the deletion status of a routing policy.
 *     *   If the routing policy is in the Deleting state, the routing policy instance is being deleted.
 *     *   If no routing policy instance is recorded, the routing policy instance has been deleted.
 *
 * @param request DeleteErRouteMapRequest
 * @return DeleteErRouteMapResponse
 */
async function deleteErRouteMap(request: DeleteErRouteMapRequest): DeleteErRouteMapResponse {
  var runtime = new Util.RuntimeOptions{};
  return deleteErRouteMapWithOptions(request, runtime);
}

model DeleteSubnetRequest {
  regionId?: string(name='RegionId', description='The region ID of the disk.

This parameter is required.', example='cn-wulanchabu'),
  subnetId?: string(name='SubnetId', description='Lingjun subnet ID

This parameter is required.', example='subnet-f3zfzmnc'),
  vpdId?: string(name='VpdId', description='Lingjun CIDR block ID

This parameter is required.', example='vpd-iv2zm1qf'),
  zoneId?: string(name='ZoneId', description='Zone

This parameter is required.', example='cn-wulanchabu-b'),
}

model DeleteSubnetResponseBody = {
  accessDeniedDetail?: string(name='AccessDeniedDetail', description='The detailed reason why the access was denied.', example='None'),
  code?: int32(name='Code', description='The response status code.', example='0'),
  content?: any(name='Content', description='Response content (if the resource has dependent resources, the existing dependent resources will be returned)', example='{
      "nc": [
            {}
      ]
}'),
  message?: string(name='Message', description='The error message. (If the instance is in the Exception state, the exception cause is prompted.)', example='success'),
  requestId?: string(name='RequestId', description='The request ID, which is used to locate and troubleshoot issues.', example='A56F7D3C-8850-5AF4-A342-2D71C9A9D1CC'),
}

model DeleteSubnetResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: DeleteSubnetResponseBody(name='body'),
}

/**
 * @summary If you delete a Lingjun subnet instance, the related data is lost and cannot be recovered.
 *
 * @description When you call this operation to delete a Lingjun subnet, note that:
 * *   After deletion, all related data is lost and cannot be recovered. Exercise caution when performing this operation.
 * *   This interface is an asynchronous interface. After this interface is called, the Lingjun subnet instance may not be deleted, and the system background deletion task is still in progress. You can call the ListSubnets or GetSubnet operation to query the deletion status of the subnet.
 *     *   If the status of the Lingjun subnet is Deleting, the Lingjun subnet instance is being deleted.
 *     *   If there is no record of the Lingjun subnet instance, the Lingjun subnet instance has been deleted.
 *
 * @param request DeleteSubnetRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return DeleteSubnetResponse
 */
async function deleteSubnetWithOptions(request: DeleteSubnetRequest, runtime: Util.RuntimeOptions): DeleteSubnetResponse {
  Util.validateModel(request);
  var body : map[string]any = {};
  if (!Util.isUnset(request.regionId)) {
    body['RegionId'] = request.regionId;
  }
  if (!Util.isUnset(request.subnetId)) {
    body['SubnetId'] = request.subnetId;
  }
  if (!Util.isUnset(request.vpdId)) {
    body['VpdId'] = request.vpdId;
  }
  if (!Util.isUnset(request.zoneId)) {
    body['ZoneId'] = request.zoneId;
  }
  var req = new OpenApi.OpenApiRequest{ 
    body = OpenApiUtil.parseToMap(body),
  };
  var params = new OpenApi.Params{
    action = 'DeleteSubnet',
    version = '2022-05-30',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'POST',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary If you delete a Lingjun subnet instance, the related data is lost and cannot be recovered.
 *
 * @description When you call this operation to delete a Lingjun subnet, note that:
 * *   After deletion, all related data is lost and cannot be recovered. Exercise caution when performing this operation.
 * *   This interface is an asynchronous interface. After this interface is called, the Lingjun subnet instance may not be deleted, and the system background deletion task is still in progress. You can call the ListSubnets or GetSubnet operation to query the deletion status of the subnet.
 *     *   If the status of the Lingjun subnet is Deleting, the Lingjun subnet instance is being deleted.
 *     *   If there is no record of the Lingjun subnet instance, the Lingjun subnet instance has been deleted.
 *
 * @param request DeleteSubnetRequest
 * @return DeleteSubnetResponse
 */
async function deleteSubnet(request: DeleteSubnetRequest): DeleteSubnetResponse {
  var runtime = new Util.RuntimeOptions{};
  return deleteSubnetWithOptions(request, runtime);
}

model DeleteVccGrantRuleRequest {
  erId?: string(name='ErId', description='Lingjun HUB ID', example='er-kkopgtne'),
  grantRuleId?: string(name='GrantRuleId', description='Authorization Entry ID

This parameter is required.', example='grant-rule-jaj34d75h01'),
  instanceId?: string(name='InstanceId', description='Network Instance ID', example='vcc-cn-jaj34d75h01'),
  regionId?: string(name='RegionId', description='The region ID.

This parameter is required.', example='cn-wulanchabu'),
}

model DeleteVccGrantRuleResponseBody = {
  accessDeniedDetail?: string(name='AccessDeniedDetail', description='The details about the access denial.

>  This parameter is returned only if Resource Access Management (RAM) permission verification failed.', example='None'),
  code?: int32(name='Code', description='The response status code.', example='0'),
  content?: any(name='Content', description='Response body', example='{}'),
  message?: string(name='Message', description='The error message. (If the instance is in the Exception state, the exception cause is prompted.)', example='success'),
  requestId?: string(name='RequestId', description='Request ID of the current request', example='BDBCC783-84CA-5733-8EEA-645C88B9009C'),
}

model DeleteVccGrantRuleResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: DeleteVccGrantRuleResponseBody(name='body'),
}

/**
 * @summary If you delete a Lingjun HUB cross-account authorization that is connected to Lingjun, the related data is lost and cannot be recovered.
 *
 * @param request DeleteVccGrantRuleRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return DeleteVccGrantRuleResponse
 */
async function deleteVccGrantRuleWithOptions(request: DeleteVccGrantRuleRequest, runtime: Util.RuntimeOptions): DeleteVccGrantRuleResponse {
  Util.validateModel(request);
  var body : map[string]any = {};
  if (!Util.isUnset(request.erId)) {
    body['ErId'] = request.erId;
  }
  if (!Util.isUnset(request.grantRuleId)) {
    body['GrantRuleId'] = request.grantRuleId;
  }
  if (!Util.isUnset(request.instanceId)) {
    body['InstanceId'] = request.instanceId;
  }
  if (!Util.isUnset(request.regionId)) {
    body['RegionId'] = request.regionId;
  }
  var req = new OpenApi.OpenApiRequest{ 
    body = OpenApiUtil.parseToMap(body),
  };
  var params = new OpenApi.Params{
    action = 'DeleteVccGrantRule',
    version = '2022-05-30',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'POST',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary If you delete a Lingjun HUB cross-account authorization that is connected to Lingjun, the related data is lost and cannot be recovered.
 *
 * @param request DeleteVccGrantRuleRequest
 * @return DeleteVccGrantRuleResponse
 */
async function deleteVccGrantRule(request: DeleteVccGrantRuleRequest): DeleteVccGrantRuleResponse {
  var runtime = new Util.RuntimeOptions{};
  return deleteVccGrantRuleWithOptions(request, runtime);
}

model DeleteVccRouteEntryRequest {
  destinationCidrBlock?: string(name='DestinationCidrBlock', description='Destination CIDR block', example='172.16.199.128/25'),
  regionId?: string(name='RegionId', description='The region ID.', example='cn-wulanchabu'),
  vccId?: string(name='VccId', description='The ID of the Lingjun connection instance.', example='vcc-cn-zvp2w222001'),
  vccRouteEntryId?: string(name='VccRouteEntryId', description='The ID of the route entry.', example='vcc-rte-5cey1sap'),
}

model DeleteVccRouteEntryResponseBody = {
  accessDeniedDetail?: string(name='AccessDeniedDetail', description='The details about the access denial.', example='None'),
  code?: int32(name='Code', description='The response status code.', example='0'),
  content?: any(name='Content', description='Response body', example='{}'),
  message?: string(name='Message', description='The returned message.', example='success'),
  requestId?: string(name='RequestId', description='Request ID of the current request', example='0901F411-28FA-5B9C-BAEE-7776463FF0DC'),
}

model DeleteVccRouteEntryResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: DeleteVccRouteEntryResponseBody(name='body'),
}

/**
 * @summary Delete a Lingjun connection route entry.
 *
 * @description When you call this operation to delete a VBR static route entry, note that:
 * *   After deletion, all related data is lost and cannot be recovered. Exercise caution when performing this operation.
 * *   This operation is an asynchronous operation. After you call this operation, the VBR static route entries may not be deleted. The system still deletes the VBR static route entries in the background. You can call the ListVccRouteEntries or GetVccRouteEntry to query the deletion status of VBR static route entries:
 *     *   If the VBR static route entry is in the Deleting state, the VBR static route entry is being deleted.
 *     *   If no VBR static route entry instance is recorded, the VBR static route entry instance has been deleted.
 *
 * @param request DeleteVccRouteEntryRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return DeleteVccRouteEntryResponse
 */
async function deleteVccRouteEntryWithOptions(request: DeleteVccRouteEntryRequest, runtime: Util.RuntimeOptions): DeleteVccRouteEntryResponse {
  Util.validateModel(request);
  var body : map[string]any = {};
  if (!Util.isUnset(request.destinationCidrBlock)) {
    body['DestinationCidrBlock'] = request.destinationCidrBlock;
  }
  if (!Util.isUnset(request.regionId)) {
    body['RegionId'] = request.regionId;
  }
  if (!Util.isUnset(request.vccId)) {
    body['VccId'] = request.vccId;
  }
  if (!Util.isUnset(request.vccRouteEntryId)) {
    body['VccRouteEntryId'] = request.vccRouteEntryId;
  }
  var req = new OpenApi.OpenApiRequest{ 
    body = OpenApiUtil.parseToMap(body),
  };
  var params = new OpenApi.Params{
    action = 'DeleteVccRouteEntry',
    version = '2022-05-30',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'POST',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Delete a Lingjun connection route entry.
 *
 * @description When you call this operation to delete a VBR static route entry, note that:
 * *   After deletion, all related data is lost and cannot be recovered. Exercise caution when performing this operation.
 * *   This operation is an asynchronous operation. After you call this operation, the VBR static route entries may not be deleted. The system still deletes the VBR static route entries in the background. You can call the ListVccRouteEntries or GetVccRouteEntry to query the deletion status of VBR static route entries:
 *     *   If the VBR static route entry is in the Deleting state, the VBR static route entry is being deleted.
 *     *   If no VBR static route entry instance is recorded, the VBR static route entry instance has been deleted.
 *
 * @param request DeleteVccRouteEntryRequest
 * @return DeleteVccRouteEntryResponse
 */
async function deleteVccRouteEntry(request: DeleteVccRouteEntryRequest): DeleteVccRouteEntryResponse {
  var runtime = new Util.RuntimeOptions{};
  return deleteVccRouteEntryWithOptions(request, runtime);
}

model DeleteVpdRequest {
  regionId?: string(name='RegionId', description='The ID of the region in which the instance resides.

This parameter is required.', example='cn-hangzhou'),
  vpdId?: string(name='VpdId', description='The ID of the Lingjun CIDR block.

This parameter is required.', example='vpd-zr0farea'),
}

model DeleteVpdResponseBody = {
  accessDeniedDetail?: string(name='AccessDeniedDetail', description='The detailed reason why the access was denied.', example='None'),
  code?: int32(name='Code', description='The response status code.', example='0'),
  content?: any(name='Content', description='The response parameters. (If a dependent resource exists, the existing dependent resource is returned.)', example='{
      "subnet": [
            {
                  "tenantId": "1620939556166277",
                  "regionId": "cn-wulanchabu",
                  "zoneId": "cn",
                  "type": null,
                  "subnetId": "subnet-zqebaxa0",
                  "name": "lql_testVPD"
            }
      ],
      "nc": [
            {}
      ]
}'),
  message?: string(name='Message', description='The response message.', example='SUCCESS'),
  requestId?: string(name='RequestId', description='The request ID.', example='BDBCC783-84CA-5733-8EEA-645C88B9009C'),
}

model DeleteVpdResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: DeleteVpdResponseBody(name='body'),
}

/**
 * @summary After you delete a Lingjun CIDR block, the related data is lost and cannot be recovered.
 *
 * @description When you call this operation to delete a Lingjun CIDR block, take note of the following items:
 * *   After deletion, all related data is lost and cannot be recovered. Exercise caution when performing this operation.
 * *   Before deleting, make sure that all Lingjun subnet instances under the Lingjun CIDR block have been deleted.
 * *   This interface is an asynchronous interface. After this interface is called, the Lingjun network segment instance may not be deleted, and the system background deletion task is still in progress. You can call the ListVpds or GetVpd operation to query the deletion status of the CIDR block.
 *     *   If the status of the Lingjun CIDR block is Deleting, the Lingjun CIDR block is being deleted.
 *     *   If there is no record of the Lingjun CIDR block instance, the Lingjun CIDR block instance has been deleted.
 *
 * @param request DeleteVpdRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return DeleteVpdResponse
 */
async function deleteVpdWithOptions(request: DeleteVpdRequest, runtime: Util.RuntimeOptions): DeleteVpdResponse {
  Util.validateModel(request);
  var body : map[string]any = {};
  if (!Util.isUnset(request.regionId)) {
    body['RegionId'] = request.regionId;
  }
  if (!Util.isUnset(request.vpdId)) {
    body['VpdId'] = request.vpdId;
  }
  var req = new OpenApi.OpenApiRequest{ 
    body = OpenApiUtil.parseToMap(body),
  };
  var params = new OpenApi.Params{
    action = 'DeleteVpd',
    version = '2022-05-30',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'POST',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary After you delete a Lingjun CIDR block, the related data is lost and cannot be recovered.
 *
 * @description When you call this operation to delete a Lingjun CIDR block, take note of the following items:
 * *   After deletion, all related data is lost and cannot be recovered. Exercise caution when performing this operation.
 * *   Before deleting, make sure that all Lingjun subnet instances under the Lingjun CIDR block have been deleted.
 * *   This interface is an asynchronous interface. After this interface is called, the Lingjun network segment instance may not be deleted, and the system background deletion task is still in progress. You can call the ListVpds or GetVpd operation to query the deletion status of the CIDR block.
 *     *   If the status of the Lingjun CIDR block is Deleting, the Lingjun CIDR block is being deleted.
 *     *   If there is no record of the Lingjun CIDR block instance, the Lingjun CIDR block instance has been deleted.
 *
 * @param request DeleteVpdRequest
 * @return DeleteVpdResponse
 */
async function deleteVpd(request: DeleteVpdRequest): DeleteVpdResponse {
  var runtime = new Util.RuntimeOptions{};
  return deleteVpdWithOptions(request, runtime);
}

model DeleteVpdGrantRuleRequest {
  erId?: string(name='ErId', description='Lingjun HUB ID', example='er-kkopgtne'),
  grantRuleId?: string(name='GrantRuleId', description='Authorization Entry ID

This parameter is required.', example='grant-rule-9rgxqazb'),
  grantTenantId?: string(name='GrantTenantId', description='Authorized Tenant ID', example='1013666993027780'),
  instanceId?: string(name='InstanceId', description='Network Instance ID', example='vpd-8rgvqazb'),
  regionId?: string(name='RegionId', description='The region ID.

This parameter is required.', example='cn-wulanchabu'),
}

model DeleteVpdGrantRuleResponseBody = {
  accessDeniedDetail?: string(name='AccessDeniedDetail', description='The details about the access denial.', example='None'),
  code?: int32(name='Code', description='The response status code.', example='0'),
  content?: any(name='Content', description='Response body', example='{}'),
  message?: string(name='Message', description='The error message. (If the instance is in the Exception state, the exception cause is prompted.)', example='success'),
  requestId?: string(name='RequestId', description='Request ID of the current request', example='0901F411-28FA-5B9C-BAEE-7776463FF0DC'),
}

model DeleteVpdGrantRuleResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: DeleteVpdGrantRuleResponseBody(name='body'),
}

/**
 * @summary Delete the Lingjun HUB cross-account authorization for a Lingjun CIDR block. After the deletion, the related data is lost and cannot be recovered.
 *
 * @param request DeleteVpdGrantRuleRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return DeleteVpdGrantRuleResponse
 */
async function deleteVpdGrantRuleWithOptions(request: DeleteVpdGrantRuleRequest, runtime: Util.RuntimeOptions): DeleteVpdGrantRuleResponse {
  Util.validateModel(request);
  var body : map[string]any = {};
  if (!Util.isUnset(request.erId)) {
    body['ErId'] = request.erId;
  }
  if (!Util.isUnset(request.grantRuleId)) {
    body['GrantRuleId'] = request.grantRuleId;
  }
  if (!Util.isUnset(request.grantTenantId)) {
    body['GrantTenantId'] = request.grantTenantId;
  }
  if (!Util.isUnset(request.instanceId)) {
    body['InstanceId'] = request.instanceId;
  }
  if (!Util.isUnset(request.regionId)) {
    body['RegionId'] = request.regionId;
  }
  var req = new OpenApi.OpenApiRequest{ 
    body = OpenApiUtil.parseToMap(body),
  };
  var params = new OpenApi.Params{
    action = 'DeleteVpdGrantRule',
    version = '2022-05-30',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'POST',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Delete the Lingjun HUB cross-account authorization for a Lingjun CIDR block. After the deletion, the related data is lost and cannot be recovered.
 *
 * @param request DeleteVpdGrantRuleRequest
 * @return DeleteVpdGrantRuleResponse
 */
async function deleteVpdGrantRule(request: DeleteVpdGrantRuleRequest): DeleteVpdGrantRuleResponse {
  var runtime = new Util.RuntimeOptions{};
  return deleteVpdGrantRuleWithOptions(request, runtime);
}

model DescribeSlrRequest {
  resourceGroupId?: string(name='ResourceGroupId', description='The ID of the resource group to which the RAM instance belongs.', example='rg-aeky5f3qx6ceapq'),
}

model DescribeSlrResponseBody = {
  accessDeniedDetail?: string(name='AccessDeniedDetail', description='The information about the request denial.', example='{}'),
  code?: int32(name='Code', description='The response status code.', example='0'),
  content?: {
    hasRole?: boolean(name='HasRole', description='Whether the role exists', example='true'),
  }(name='Content', description='The returned data.'),
  message?: string(name='Message', description='The error message. (If the instance is in the Exception state, the exception cause is prompted.)', example='success'),
  requestId?: string(name='RequestId', description='Request ID of the current request', example='9C50C9CD-E799-54DA-BA7A-1FAF3DF80857'),
}

model DescribeSlrResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: DescribeSlrResponseBody(name='body'),
}

/**
 * @summary Query whether the user has the SLR role-AliyunServiceRoleForEfloVcc required for Lingjun connection.
 *
 * @description You can call this operation to query whether a user account has a **AliyunServiceRoleForEfloVcc** role.
 * >  If you do not have a **AliyunServiceRoleForEfloVcc** role, you need to use the initializeVcc interface to complete authorization, otherwise users will not be able to use Lingjun to connect to the product.
 *
 * @param request DescribeSlrRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return DescribeSlrResponse
 */
async function describeSlrWithOptions(request: DescribeSlrRequest, runtime: Util.RuntimeOptions): DescribeSlrResponse {
  Util.validateModel(request);
  var body : map[string]any = {};
  if (!Util.isUnset(request.resourceGroupId)) {
    body['ResourceGroupId'] = request.resourceGroupId;
  }
  var req = new OpenApi.OpenApiRequest{ 
    body = OpenApiUtil.parseToMap(body),
  };
  var params = new OpenApi.Params{
    action = 'DescribeSlr',
    version = '2022-05-30',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'POST',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Query whether the user has the SLR role-AliyunServiceRoleForEfloVcc required for Lingjun connection.
 *
 * @description You can call this operation to query whether a user account has a **AliyunServiceRoleForEfloVcc** role.
 * >  If you do not have a **AliyunServiceRoleForEfloVcc** role, you need to use the initializeVcc interface to complete authorization, otherwise users will not be able to use Lingjun to connect to the product.
 *
 * @param request DescribeSlrRequest
 * @return DescribeSlrResponse
 */
async function describeSlr(request: DescribeSlrRequest): DescribeSlrResponse {
  var runtime = new Util.RuntimeOptions{};
  return describeSlrWithOptions(request, runtime);
}

model DetachElasticNetworkInterfaceRequest {
  elasticNetworkInterfaceId?: string(name='ElasticNetworkInterfaceId', description='The ID of the ENI.

This parameter is required.', example='leni-1234****'),
  nodeId?: string(name='NodeId', description='The ID of the node.

This parameter is required.', example='e01-cn-zxu2zp3****'),
  regionId?: string(name='RegionId', description='The region ID of the disk.

This parameter is required.', example='cn-wulanchabu'),
}

model DetachElasticNetworkInterfaceResponseBody = {
  accessDeniedDetail?: string(name='AccessDeniedDetail', description='The detailed reason why the access was denied.', example='{}'),
  code?: int32(name='Code', description='The response status code.', example='0'),
  message?: string(name='Message', description='Response', example='You don\\\\"t have the permission to do this operation.'),
  requestId?: string(name='RequestId', description='The request ID.', example='9C50C9CD-E799-54DA-BA7A-1FAF3DF8****'),
}

model DetachElasticNetworkInterfaceResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: DetachElasticNetworkInterfaceResponseBody(name='body'),
}

/**
 * @summary Unbind Lingjun ENI from NC.
 *
 * @description This interface is an asynchronous interface, and you need to use the query interface to wait for the Lingjun Elastic Network Interface to reach the unbound state.
 *
 * @param request DetachElasticNetworkInterfaceRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return DetachElasticNetworkInterfaceResponse
 */
async function detachElasticNetworkInterfaceWithOptions(request: DetachElasticNetworkInterfaceRequest, runtime: Util.RuntimeOptions): DetachElasticNetworkInterfaceResponse {
  Util.validateModel(request);
  var body : map[string]any = {};
  if (!Util.isUnset(request.elasticNetworkInterfaceId)) {
    body['ElasticNetworkInterfaceId'] = request.elasticNetworkInterfaceId;
  }
  if (!Util.isUnset(request.nodeId)) {
    body['NodeId'] = request.nodeId;
  }
  if (!Util.isUnset(request.regionId)) {
    body['RegionId'] = request.regionId;
  }
  var req = new OpenApi.OpenApiRequest{ 
    body = OpenApiUtil.parseToMap(body),
  };
  var params = new OpenApi.Params{
    action = 'DetachElasticNetworkInterface',
    version = '2022-05-30',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'POST',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Unbind Lingjun ENI from NC.
 *
 * @description This interface is an asynchronous interface, and you need to use the query interface to wait for the Lingjun Elastic Network Interface to reach the unbound state.
 *
 * @param request DetachElasticNetworkInterfaceRequest
 * @return DetachElasticNetworkInterfaceResponse
 */
async function detachElasticNetworkInterface(request: DetachElasticNetworkInterfaceRequest): DetachElasticNetworkInterfaceResponse {
  var runtime = new Util.RuntimeOptions{};
  return detachElasticNetworkInterfaceWithOptions(request, runtime);
}

model GetDestinationCidrBlockRequest {
  instanceId?: string(name='InstanceId', description='Instance ID

This parameter is required.', example='vpd-xxxxxxxxx'),
  regionId?: string(name='RegionId', description='Region ID

This parameter is required.', example='cn-wulanchabu'),
}

model GetDestinationCidrBlockResponseBody = {
  accessDeniedDetail?: string(name='AccessDeniedDetail', description='The details about the access denial.', example='{}'),
  code?: int32(name='Code', description='The response status code', example='0'),
  content?: {
    destinationCidrBlock?: [ string ](name='DestinationCidrBlock', description='List of destination CIDR block information for the current network instance'),
  }(name='Content', description='Response content'),
  message?: string(name='Message', description='Error message. (Indicates the reason for the anomaly when the instance status is abnormal.)', example='success'),
  requestId?: string(name='RequestId', description='ID of this request', example='D349EE86-AF3F-5F6C-87E2-2A08D3618350'),
}

model GetDestinationCidrBlockResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: GetDestinationCidrBlockResponseBody(name='body'),
}

/**
 * @summary Users can use this API to query the destination CIDR block of the source policy instance when creating a routing strategy.
 *
 * @param request GetDestinationCidrBlockRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return GetDestinationCidrBlockResponse
 */
async function getDestinationCidrBlockWithOptions(request: GetDestinationCidrBlockRequest, runtime: Util.RuntimeOptions): GetDestinationCidrBlockResponse {
  Util.validateModel(request);
  var body : map[string]any = {};
  if (!Util.isUnset(request.instanceId)) {
    body['InstanceId'] = request.instanceId;
  }
  if (!Util.isUnset(request.regionId)) {
    body['RegionId'] = request.regionId;
  }
  var req = new OpenApi.OpenApiRequest{ 
    body = OpenApiUtil.parseToMap(body),
  };
  var params = new OpenApi.Params{
    action = 'GetDestinationCidrBlock',
    version = '2022-05-30',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'POST',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Users can use this API to query the destination CIDR block of the source policy instance when creating a routing strategy.
 *
 * @param request GetDestinationCidrBlockRequest
 * @return GetDestinationCidrBlockResponse
 */
async function getDestinationCidrBlock(request: GetDestinationCidrBlockRequest): GetDestinationCidrBlockResponse {
  var runtime = new Util.RuntimeOptions{};
  return getDestinationCidrBlockWithOptions(request, runtime);
}

model GetElasticNetworkInterfaceRequest {
  elasticNetworkInterfaceId?: string(name='ElasticNetworkInterfaceId', description='Lingjun Elastic Network Interface ID

This parameter is required.', example='leni-1234****'),
  regionId?: string(name='RegionId', description='The region ID.

This parameter is required.', example='cn-wulanchabu'),
}

model GetElasticNetworkInterfaceResponseBody = {
  accessDeniedDetail?: string(name='AccessDeniedDetail', description='The details about the access denial.', example='{}'),
  code?: int32(name='Code', description='The response status code.', example='0'),
  content?: {
    createTime?: string(name='CreateTime', description='The time when the data address was created.', example='2022-01-13 12:51:41'),
    description?: string(name='Description', description='The instance description.', example='terraform-example'),
    elasticNetworkInterfaceId?: string(name='ElasticNetworkInterfaceId', description='Lingjun Elastic Network Interface ID', example='leni-1234****'),
    enableJumboFrame?: boolean(name='EnableJumboFrame', description='Whether to enable the jumboFrame capability', example='True'),
    gateway?: string(name='Gateway', description='vswitch gateway address', example='172.16.****'),
    gmtModified?: string(name='GmtModified', description='The time when the agent was last modified.', example='2022-01-13 12:51:41'),
    ip?: string(name='Ip', description='Elastic Network Interface IP', example='203.107.****'),
    ipv6Addresses?: [ 
      {
        description?: string(name='Description', description='The instance description.', example='Description'),
        elasticNetworkInterfaceId?: string(name='ElasticNetworkInterfaceId', description='Lingjun Elastic Network Interface ID', example='leni-1234****'),
        gmtCreate?: string(name='GmtCreate', description='The time when the data address was created.', example='1585816811000'),
        gmtModified?: string(name='GmtModified', description='The time when the cluster was updated.', example='1549012834000'),
        ipName?: string(name='IpName', description='IPV6 unique identifier', example='sip-sg3xabeq'),
        ipv6Address?: string(name='Ipv6Address', description='IPV6 address', example='2408:4005:3aa:1000:470d:66fb:56a5:****'),
        message?: string(name='Message', description='The error message. (If the instance is in the Exception state, the exception cause is prompted.)', example='success'),
        regionId?: string(name='RegionId', description='The region ID.', example='cn-wulanchabu'),
        status?: string(name='Status', description='The status of the intervention entry. Valid value:', example='Available'),
      }
    ](name='Ipv6Addresses', description='IPV6 address'),
    mac?: string(name='Mac', description='mac address', example='00:22:6D:97:**:**'),
    mask?: string(name='Mask', description='vswitch mask bits', example='24'),
    message?: string(name='Message', description='The error message.', example='success'),
    nodeId?: string(name='NodeId', description='Lingjun Node ID', example='e01-cn-lbj3aej****'),
    privateIpAddresses?: [ 
      {
        description?: string(name='Description', description='The instance description.', example='Description'),
        elasticNetworkInterfaceId?: string(name='ElasticNetworkInterfaceId', description='Lingjun Elastic Network Interface ID', example='leni-1234****'),
        gmtCreate?: string(name='GmtCreate', description='The time when the data address was created.', example='1672971789000'),
        gmtModified?: string(name='GmtModified', description='The time when the cluster was updated.', example='1672971789000'),
        ipName?: string(name='IpName', description='Lingjun Elastic Network Interface Secondary Private IP Unique Identifier', example='sip-ywz****'),
        message?: string(name='Message', description='The returned message.', example='Successful'),
        privateIpAddress?: string(name='PrivateIpAddress', description='Lingjun Elastic Network Interface secondary private IP address', example='172.16.****'),
        regionId?: string(name='RegionId', description='The region ID.', example='cn-wulanchabu'),
        status?: string(name='Status', description='The status of the intervention entry. Valid value:', example='Available'),
      }
    ](name='PrivateIpAddresses', description='Secondary private IP address'),
    regionId?: string(name='RegionId', description='The region ID.', example='cn-wulanchabu'),
    resourceGroupId?: string(name='ResourceGroupId'),
    securityGroupId?: string(name='SecurityGroupId', description='The ID of the security group.', example='sg-0jl5s4p4laalruk7****'),
    status?: string(name='Status', description='The state of the private gateway.

Valid value:

*   Create Failed: the creation failure.
*   Delete Failed: the that failed to be deleted.
*   Executing
*   Available
*   Deleting', example='Available'),
    type?: string(name='Type', description='NIC Type

Valid value:

*   CUSTOM: custom type.
*   DEFAULT: system type.', example='DEFAULT'),
    vSwitchId?: string(name='VSwitchId', description='The ID of the vSwitch.', example='vsw-uf6u8473r84e9****'),
    vpcId?: string(name='VpcId', description='VPC ID', example='vpc-j6ctp4n75306****'),
    zoneId?: string(name='ZoneId', description='The zone ID.', example='cn-wulanchabu-b'),
  }(name='Content', description='The response parameters.'),
  message?: string(name='Message', description='The return message.', example='success'),
  requestId?: string(name='RequestId', description='The ID of the request.', example='0901F411-28FA-5B9C-BAEE-7776463FF0DC'),
}

model GetElasticNetworkInterfaceResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: GetElasticNetworkInterfaceResponseBody(name='body'),
}

/**
 * @summary Queries the details of an LENI.
 *
 * @param request GetElasticNetworkInterfaceRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return GetElasticNetworkInterfaceResponse
 */
async function getElasticNetworkInterfaceWithOptions(request: GetElasticNetworkInterfaceRequest, runtime: Util.RuntimeOptions): GetElasticNetworkInterfaceResponse {
  Util.validateModel(request);
  var body : map[string]any = {};
  if (!Util.isUnset(request.elasticNetworkInterfaceId)) {
    body['ElasticNetworkInterfaceId'] = request.elasticNetworkInterfaceId;
  }
  if (!Util.isUnset(request.regionId)) {
    body['RegionId'] = request.regionId;
  }
  var req = new OpenApi.OpenApiRequest{ 
    body = OpenApiUtil.parseToMap(body),
  };
  var params = new OpenApi.Params{
    action = 'GetElasticNetworkInterface',
    version = '2022-05-30',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'POST',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Queries the details of an LENI.
 *
 * @param request GetElasticNetworkInterfaceRequest
 * @return GetElasticNetworkInterfaceResponse
 */
async function getElasticNetworkInterface(request: GetElasticNetworkInterfaceRequest): GetElasticNetworkInterfaceResponse {
  var runtime = new Util.RuntimeOptions{};
  return getElasticNetworkInterfaceWithOptions(request, runtime);
}

model GetErRequest {
  erId?: string(name='ErId', description='Lingjun HUB ID

This parameter is required.', example='er-kkopgtne'),
  regionId?: string(name='RegionId', description='The region ID.

This parameter is required.', example='cn-wulanchabu'),
}

model GetErResponseBody = {
  accessDeniedDetail?: string(name='AccessDeniedDetail', description='The details about the access denial.', example='{}'),
  code?: int32(name='Code', description='The response status code.', example='0'),
  content?: {
    createTime?: string(name='CreateTime', description='The time when the data address was created.', example='1644283112720'),
    description?: string(name='Description', description='Description', example='test'),
    erAttachments?: [ 
      {
        across?: boolean(name='Across', description='Cross-account', example='false'),
        autoReceiveAllRoute?: boolean(name='AutoReceiveAllRoute', description='Receive all routes automatically', example='true'),
        createTime?: string(name='CreateTime', description='The time when the data address was created.', example='1644283112720'),
        erAttachmentId?: string(name='ErAttachmentId', description='The connection ID of the Lingjun HUB network instance.', example='er-attachment-f32hxfsu'),
        erAttachmentName?: string(name='ErAttachmentName', description='Network Instance Name', example='fudan-egpu'),
        erId?: string(name='ErId', description='Lingjun HUB Instance ID', example='er-kkopgtne'),
        gmtModified?: string(name='GmtModified', description='The time when the agent was last modified.', example='1649303733000'),
        instanceId?: string(name='InstanceId', description='The instance ID.', example='vpd-kkopgtne'),
        instanceName?: string(name='InstanceName', description='The name of the ECU.', example='zhijiao'),
        instanceType?: string(name='InstanceType', description='Instance type: VPD and VCC

Valid value:

*   VCC: Lingjun Connection.
*   VPD: Lingjun network segment.', example='VPD'),
        message?: string(name='Message', description='The returned message.', example='success'),
        regionId?: string(name='RegionId', description='The synchronized region where the ECS instances are deployed.', example='cn-wulanchabu'),
        resourceGroupId?: string(name='ResourceGroupId', description='Resource group instance ID', example='rg-acfmzzka6bnjvbi'),
        resourceTenantId?: string(name='ResourceTenantId', description='The ID of the tenant to which the resource belongs.', example='xxxxxxxx'),
        status?: string(name='Status', description='The status of the intervention entry. Valid value:', example='Available'),
        tenantId?: string(name='TenantId', description='The ID of the tenant.', example='1620939556166277'),
      }
    ](name='ErAttachments', description='Network instance information list'),
    erId?: string(name='ErId', description='Lingjun HUB Instance ID', example='er-aueyxxsy'),
    erName?: string(name='ErName', description='Lingjun HUB Instance Name', example='er-heyuan-main'),
    erRouteEntrys?: [ 
      {
        destinationCidrBlock?: string(name='DestinationCidrBlock', description='Destination CIDR Block', example='10.0.0.0/9'),
        erId?: string(name='ErId', description='Lingjun HUB Instance ID', example='er-kkopgtne'),
        erRouteEntryId?: string(name='ErRouteEntryId', description='The ID of the route entry.', example='er-rte-xnmsd2kl'),
        gmtModified?: string(name='GmtModified', description='The time when the cluster was updated.', example='1623317089000'),
        nextHopId?: string(name='NextHopId', description='Next Hop Instance', example='vcc-xxkmggkw'),
        nextHopType?: string(name='NextHopType', description='Next Hop Instance Type', example='VCC'),
        regionId?: string(name='RegionId', description='The region ID.', example='cn-wulanchabu'),
        resourceGroupId?: string(name='ResourceGroupId', description='Resource group instance ID', example='rg-acfmyoj5mg3w54y'),
        resourceTenantId?: string(name='ResourceTenantId', description='The ID of the tenant to which the resource belongs.', example='1620939556166277'),
        routeType?: string(name='RouteType', description='Route type', example='System'),
        status?: string(name='Status', description='The status of the intervention entry. Valid value:', example='Available'),
        tenantId?: string(name='TenantId', description='The ID of the tenant.', example='1620939556166277'),
      }
    ](name='ErRouteEntrys', description='The list of route entry information.'),
    erRouteMaps?: [ 
      {
        action?: string(name='Action', description='Policy behavior

Valid value:

*   deny: rejects the.
*   permit: The allows.', example='permit'),
        createTime?: string(name='CreateTime', description='The time when the data address was created.', example='1645766599809'),
        description?: string(name='Description', description='Policy description', example='test'),
        destinationCidrBlock?: string(name='DestinationCidrBlock', description='Destination CIDR Block', example='10.0.0.0/8'),
        erId?: string(name='ErId', description='Lingjun HUB ID', example='er-kkopgtne'),
        erRouteMapId?: string(name='ErRouteMapId', description='routing policy ID', example='er-rmap-xkslnmsr'),
        erRouteMapName?: string(name='ErRouteMapName', description='The name of the routing policy.', example='route-map-name'),
        gmtModified?: string(name='GmtModified', description='The time when the agent was last modified.', example='1623899444000'),
        message?: string(name='Message', description='The message that is returned.', example='success'),
        receptionInstanceId?: string(name='ReceptionInstanceId', description='The ID of the destination instance.', example='vpd-sdkd2gkx'),
        receptionInstanceName?: string(name='ReceptionInstanceName', description='The name of the destination instance.', example='Reception-name'),
        receptionInstanceOwner?: string(name='ReceptionInstanceOwner', description='The tenant to which the destination instance belongs.', example='1620939556166277'),
        receptionInstanceType?: string(name='ReceptionInstanceType', description='The type of the destination instance.', example='VPD'),
        regionId?: string(name='RegionId', description='The region ID.', example='cn-wulanchabu'),
        resourceGroupId?: string(name='ResourceGroupId', description='Resource group instance ID', example='rg-acfmzaq3ypaqkdy'),
        routeMapNum?: int32(name='RouteMapNum', description='Policy sequence number (1001-2000)', example='1001'),
        status?: string(name='Status', description='The status of the intervention entry. Valid value:', example='Available'),
        tenantId?: string(name='TenantId', description='The ID of the tenant.', example='XXQGPROD-zh_CN'),
        transmissionInstanceId?: string(name='TransmissionInstanceId', description='The ID of the source instance.', example='vpd-xmglsymg'),
        transmissionInstanceName?: string(name='TransmissionInstanceName', description='Source instance name', example='test-transmission'),
        transmissionInstanceOwner?: string(name='TransmissionInstanceOwner', description='The tenant to which the source instance belongs.', example='1620939556166277'),
        transmissionInstanceType?: string(name='TransmissionInstanceType', description='The type of the source instance.', example='VPD'),
      }
    ](name='ErRouteMaps', description='routing policy information list'),
    gmtModified?: string(name='GmtModified', description='The time when the agent was last modified.', example='1627545952000'),
    masterZoneId?: string(name='MasterZoneId', description='Primary Zone', example='cn-wulanchabu-b'),
    message?: string(name='Message', description='The message that is returned.', example='success'),
    regionId?: string(name='RegionId', description='The region ID.', example='cn-wulanchabu'),
    resourceGroupId?: string(name='ResourceGroupId', description='Resource group instance ID', example='rg-aekzlki4ehfse4y'),
    status?: string(name='Status', description='The status of the intervention entry. Valid value:', example='Available'),
    tenantId?: string(name='TenantId', description='The ID of the tenant.', example='1620939556166277'),
  }(name='Content', description='The response parameters.'),
  message?: string(name='Message', description='Information returned when the call fails', example='success'),
  requestId?: string(name='RequestId', description='Request ID of the current request', example='308DE9D2-03A6-5B44-A369-67B75D1EE091'),
}

model GetErResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: GetErResponseBody(name='body'),
}

/**
 * @summary Queries the Lingjun HUB.
 *
 * @param request GetErRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return GetErResponse
 */
async function getErWithOptions(request: GetErRequest, runtime: Util.RuntimeOptions): GetErResponse {
  Util.validateModel(request);
  var body : map[string]any = {};
  if (!Util.isUnset(request.erId)) {
    body['ErId'] = request.erId;
  }
  if (!Util.isUnset(request.regionId)) {
    body['RegionId'] = request.regionId;
  }
  var req = new OpenApi.OpenApiRequest{ 
    body = OpenApiUtil.parseToMap(body),
  };
  var params = new OpenApi.Params{
    action = 'GetEr',
    version = '2022-05-30',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'POST',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Queries the Lingjun HUB.
 *
 * @param request GetErRequest
 * @return GetErResponse
 */
async function getEr(request: GetErRequest): GetErResponse {
  var runtime = new Util.RuntimeOptions{};
  return getErWithOptions(request, runtime);
}

model GetErAttachmentRequest {
  erAttachmentId?: string(name='ErAttachmentId', description='The ID of the Lingjun HUB network connection instance.

This parameter is required.', example='er-attachment-i1ioibyf'),
  erId?: string(name='ErId', description='Lingjun HUB ID.

This parameter is required.', example='er-kkopgtne'),
  regionId?: string(name='RegionId', description='The region ID.

This parameter is required.', example='cn-wulanchabu'),
}

model GetErAttachmentResponseBody = {
  accessDeniedDetail?: string(name='AccessDeniedDetail', description='The details about the access denial.', example='{}'),
  code?: int32(name='Code', description='The response status code.', example='0'),
  content?: {
    across?: boolean(name='Across', description='Whether cross-account. Valid values:

*   **true**: The network instance is a cross-account resource.
*   **false**: The current network instance is a resource of the current account.', example='fasle'),
    autoReceiveAllRoute?: boolean(name='AutoReceiveAllRoute', description='Indicates whether to automatically receive all routes from all instances under the Lingjun HUB. Valid values:

*   **true**: received automatically.
*   **false**: Not received.', example='true'),
    createTime?: string(name='CreateTime', description='The time when the activation code was created.', example='1648085472000'),
    erAttachmentId?: string(name='ErAttachmentId', description='The ID of the Lingjun HUB network instance.', example='er-attachment-i1ioibyf'),
    erAttachmentName?: string(name='ErAttachmentName', description='The name of the Lingjun HUB network instance.', example='vpd-lxnsj2cx'),
    erId?: string(name='ErId', description='The ID of the Lingjun HUB instance.', example='er-aueyxxsy'),
    gmtModified?: string(name='GmtModified', description='The time when the O\\\\&M task was modified.', example='1648085472000'),
    instanceId?: string(name='InstanceId', description='The ID of the network instance. Valid values: **VPD** and **VCC**.

For more information, see [What is Lingjun?](https://help.aliyun.com/document_detail/444430.html)

You can query **Lingjun CIDR blocks** and **Lingjun connections** by [ListVpds](https://help.aliyun.com/document_detail/2331077.html) and [ListVccs](https://help.aliyun.com/document_detail/2399526.html?) respectively.', example='vpd-lxnsj2cx'),
    instanceName?: string(name='InstanceName', description='The instance name.', example='vpd-wulanchabu-main'),
    instanceType?: string(name='InstanceType', description='The database type. Valid values:

*   **VPD**: indicates the Lingjun CIDR block.
*   **VCC**: indicates a Lingjun connection.', example='VPD'),
    message?: string(name='Message', description='The returned message.', example='test'),
    regionId?: string(name='RegionId', description='The region ID.', example='cn-wulanchabu'),
    resourceGroupId?: string(name='ResourceGroupId', description='Resource group instance ID', example='rg-aekzb3n5lgk2ieq'),
    resourceTenantId?: string(name='ResourceTenantId', description='The ID of the tenant to which the resource belongs.', example='1620939556166277'),
    status?: string(name='Status', description='The status of the cache reserve instance. Valid values:

*   **Available**: Normal.
*   **Not Available**: Not available.
*   **Executing**: The task is being executed.
*   **Deleting**: The account is being deleted', example='Available'),
    tenantId?: string(name='TenantId', description='The tenant ID.', example='1655449505171'),
  }(name='Content', description='The response data.'),
  message?: string(name='Message', description='The error message. (If the instance is in the Exception state, the exception cause is displayed.)', example='You don\\\\"t have the permission to do this operation.'),
  requestId?: string(name='RequestId', description='The request ID.', example='7F0D9440-1F97-5613-87CD-D3047172A93C'),
}

model GetErAttachmentResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: GetErAttachmentResponseBody(name='body'),
}

/**
 * @summary Queries network instance connections.
 *
 * @param request GetErAttachmentRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return GetErAttachmentResponse
 */
async function getErAttachmentWithOptions(request: GetErAttachmentRequest, runtime: Util.RuntimeOptions): GetErAttachmentResponse {
  Util.validateModel(request);
  var body : map[string]any = {};
  if (!Util.isUnset(request.erAttachmentId)) {
    body['ErAttachmentId'] = request.erAttachmentId;
  }
  if (!Util.isUnset(request.erId)) {
    body['ErId'] = request.erId;
  }
  if (!Util.isUnset(request.regionId)) {
    body['RegionId'] = request.regionId;
  }
  var req = new OpenApi.OpenApiRequest{ 
    body = OpenApiUtil.parseToMap(body),
  };
  var params = new OpenApi.Params{
    action = 'GetErAttachment',
    version = '2022-05-30',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'POST',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Queries network instance connections.
 *
 * @param request GetErAttachmentRequest
 * @return GetErAttachmentResponse
 */
async function getErAttachment(request: GetErAttachmentRequest): GetErAttachmentResponse {
  var runtime = new Util.RuntimeOptions{};
  return getErAttachmentWithOptions(request, runtime);
}

model GetErRouteEntryRequest {
  erId?: string(name='ErId', description='Lingjun HUB ID

This parameter is required.', example='er-kkopgtne'),
  erRouteEntryId?: string(name='ErRouteEntryId', description='The ID of the route entry.

This parameter is required.', example='er-rte-4q0jbylz'),
  regionId?: string(name='RegionId', description='The region ID.

This parameter is required.', example='cn-wulanchabu'),
}

model GetErRouteEntryResponseBody = {
  accessDeniedDetail?: string(name='AccessDeniedDetail', description='The details about the access denial.', example='{}'),
  code?: int32(name='Code', description='The response status code.', example='0'),
  content?: {
    destinationCidrBlock?: string(name='DestinationCidrBlock', description='Destination CIDR Block', example='11.0.0.0/16'),
    erId?: string(name='ErId', description='Lingjun HUB Instance ID', example='er-aueyxxsy'),
    erRouteEntryId?: string(name='ErRouteEntryId', description='The ID of the route entry.', example='er-rte-4q0jbylz'),
    gmtModified?: string(name='GmtModified', description='The time when the cluster was updated.', example='1666677783000'),
    nextHopId?: string(name='NextHopId', description='Next Hop Instance', example='vcc-cn-209300qha01'),
    nextHopType?: string(name='NextHopType', description='Next Hop Instance Type', example='VCC'),
    regionId?: string(name='RegionId', description='The region ID.', example='cn-hangzhou'),
    resourceGroupId?: string(name='ResourceGroupId', description='Resource group instance ID', example='rg-aekzb3n5lgk2ieq'),
    routeType?: string(name='RouteType', description='Route type', example='System'),
    status?: string(name='Status', description='The status of the intervention entry. Valid value:', example='Available'),
    tenantId?: string(name='TenantId', description='The ID of the tenant.', example='1655449505171'),
  }(name='Content', description='The returned data.'),
  message?: string(name='Message', description='The error message. (If the instance is in the Exception state, the exception cause is prompted.)', example='code: 400, Request was denied due to request throttling. request id: 7D177459-C1CF-5690-BB23-321D208B37D5'),
  requestId?: string(name='RequestId', description='Request ID of the current request', example='1F38A2E6-CB47-5369-95D2-96D0C287B4A5'),
}

model GetErRouteEntryResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: GetErRouteEntryResponseBody(name='body'),
}

/**
 * @summary Queries the details of Lingjun HUB route entries.
 *
 * @param request GetErRouteEntryRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return GetErRouteEntryResponse
 */
async function getErRouteEntryWithOptions(request: GetErRouteEntryRequest, runtime: Util.RuntimeOptions): GetErRouteEntryResponse {
  Util.validateModel(request);
  var body : map[string]any = {};
  if (!Util.isUnset(request.erId)) {
    body['ErId'] = request.erId;
  }
  if (!Util.isUnset(request.erRouteEntryId)) {
    body['ErRouteEntryId'] = request.erRouteEntryId;
  }
  if (!Util.isUnset(request.regionId)) {
    body['RegionId'] = request.regionId;
  }
  var req = new OpenApi.OpenApiRequest{ 
    body = OpenApiUtil.parseToMap(body),
  };
  var params = new OpenApi.Params{
    action = 'GetErRouteEntry',
    version = '2022-05-30',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'POST',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Queries the details of Lingjun HUB route entries.
 *
 * @param request GetErRouteEntryRequest
 * @return GetErRouteEntryResponse
 */
async function getErRouteEntry(request: GetErRouteEntryRequest): GetErRouteEntryResponse {
  var runtime = new Util.RuntimeOptions{};
  return getErRouteEntryWithOptions(request, runtime);
}

model GetErRouteMapRequest {
  erId?: string(name='ErId', description='Lingjun HUB ID

This parameter is required.', example='er-kkopgtne'),
  erRouteMapId?: string(name='ErRouteMapId', description='routing policy ID

This parameter is required.', example='er-rmap-uwglhzom'),
  regionId?: string(name='RegionId', description='The region ID.', example='cn-wulanchabu'),
}

model GetErRouteMapResponseBody = {
  accessDeniedDetail?: string(name='AccessDeniedDetail', description='The details about the access denial.', example='None'),
  code?: int32(name='Code', description='The response status code.', example='0'),
  content?: {
    action?: string(name='Action', description='Policy behavior; optional values:

*   **permit**: Allow
*   **deny**: Rejected', example='permit'),
    description?: string(name='Description', description='Policy description', example='ssss'),
    destinationCidrBlock?: string(name='DestinationCidrBlock', description='Destination CIDR block', example='0.0.0.0/0'),
    erId?: string(name='ErId', description='Lingjun HUB ID', example='er-kkopgtne'),
    erRouteMapId?: string(name='ErRouteMapId', description='Lingjun HUB routing policy ID', example='er-rmap-uwglhzom'),
    erRouteMapName?: string(name='ErRouteMapName', description='Lingjun HUB routing policy Name', example='er-rmap-wulanchabu'),
    gmtCreate?: string(name='GmtCreate', description='The time when the data address was created.', example='1648085472000'),
    gmtModified?: string(name='GmtModified', description='The time when the agent was last modified.', example='1648085472000'),
    message?: string(name='Message', description='The message that is returned.', example='success'),
    receptionInstanceId?: string(name='ReceptionInstanceId', description='Receive Instance ID', example='vpd-x25vxrb2'),
    receptionInstanceName?: string(name='ReceptionInstanceName', description='Receive Instance Name', example='vpd-receprion'),
    receptionInstanceOwner?: string(name='ReceptionInstanceOwner', description='The tenant to which the receiving instance belongs', example='1620939556166277'),
    receptionInstanceType?: string(name='ReceptionInstanceType', description='The type of the received instance. Optional values:

*   **VPD**: Lingjun network segment.
*   **VCC**: Lingjun Connection.', example='VPD'),
    regionId?: string(name='RegionId', description='The region ID.', example='cn-wulanchabu'),
    resourceGroupId?: string(name='ResourceGroupId', description='Resource group instance ID', example='rg-aekzlki4ehfse4y'),
    routeMapNum?: int32(name='RouteMapNum', description='The ID of the policy.

A smaller sequence number indicates a lower priority. When a route is matched, a policy with a higher priority is preferentially matched.

**Valid values: 1001 to 2000**', example='1001'),
    status?: string(name='Status', description='The status of the cache reserve instance. Valid values:

*   **Available**
*   **Not Available**: Unavailable
*   **Executing**: Executing
*   **Deleting**: The node is being deleted.', example='Available'),
    tenantId?: string(name='TenantId', description='The ID of the tenant.', example='1655449505171'),
    transmissionInstanceId?: string(name='TransmissionInstanceId', description='Release Instance ID', example='vpd-xgkb2kl'),
    transmissionInstanceName?: string(name='TransmissionInstanceName', description='Release Instance Name', example='vpd-transimit'),
    transmissionInstanceOwner?: string(name='TransmissionInstanceOwner', description='The tenant to which the published instance belongs', example='1620939556166277'),
    transmissionInstanceType?: string(name='TransmissionInstanceType', description='Publish instance type; optional values:

*   **VPD**: Lingjun network segment.
*   **VCC**: Lingjun Connection.', example='VPD'),
  }(name='Content', description='The returned data.'),
  message?: string(name='Message', description='The error message. (If the instance is in the Exception state, the exception cause is prompted.)', example='success'),
  requestId?: string(name='RequestId', description='The ID of the request.', example='A88DFED5-24B7-5A3E-87DE-380BF06F3C90'),
}

model GetErRouteMapResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: GetErRouteMapResponseBody(name='body'),
}

/**
 * @summary query lingjun hub routing policy details.
 *
 * @param request GetErRouteMapRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return GetErRouteMapResponse
 */
async function getErRouteMapWithOptions(request: GetErRouteMapRequest, runtime: Util.RuntimeOptions): GetErRouteMapResponse {
  Util.validateModel(request);
  var body : map[string]any = {};
  if (!Util.isUnset(request.erId)) {
    body['ErId'] = request.erId;
  }
  if (!Util.isUnset(request.erRouteMapId)) {
    body['ErRouteMapId'] = request.erRouteMapId;
  }
  if (!Util.isUnset(request.regionId)) {
    body['RegionId'] = request.regionId;
  }
  var req = new OpenApi.OpenApiRequest{ 
    body = OpenApiUtil.parseToMap(body),
  };
  var params = new OpenApi.Params{
    action = 'GetErRouteMap',
    version = '2022-05-30',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'POST',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary query lingjun hub routing policy details.
 *
 * @param request GetErRouteMapRequest
 * @return GetErRouteMapResponse
 */
async function getErRouteMap(request: GetErRouteMapRequest): GetErRouteMapResponse {
  var runtime = new Util.RuntimeOptions{};
  return getErRouteMapWithOptions(request, runtime);
}

model GetFabricTopologyRequest {
  clusterId?: string(name='ClusterId', description='The cluster ID.', example='i-169263721924****'),
  lniIds?: [ string ](name='LniIds', description='Lingjun network interface controller ID List'),
  nodeIds?: [ string ](name='NodeIds', description='Node ID list'),
  regionId?: string(name='RegionId', description='The region ID.

This parameter is required.', example='cn-wulanchabu'),
  vpcId?: string(name='VpcId', description='The ID of the virtual private cloud (VPC).', example='vpc-k8i0g9fk68t7u0u2w****'),
  vpdId?: string(name='VpdId', description='Lingjun CIDR block ID', example='vpd-aof7****'),
}

model GetFabricTopologyResponseBody = {
  accessDeniedDetail?: string(name='AccessDeniedDetail', description='The details about the access denial.', example='None'),
  code?: int32(name='Code', description='The response status code.', example='0'),
  content?: {
    clusterId?: string(name='ClusterId', description='The cluster ID.', example='cluster-****'),
    regionId?: string(name='RegionId', description='The region ID.', example='cn-wulanchabu'),
    topoInfo?: [ 
      {
        layerName?: string(name='LayerName', description='The resource name.', example='core-1'),
        layerType?: string(name='LayerType', description='Hierarchical resource types

Valid value:

*   core: core layer.
*   node: Lingjun node.
*   lni: lingjun network interface controller.
*   spine: backbone layer.
*   leaf: access layer', example='core'),
        nextLayer?: [ any ](name='NextLayer', description='Next Level'),
      }
    ](name='TopoInfo', description='network interface controller Topology Information'),
    vpcId?: string(name='VpcId', description='The ID of the virtual private cloud (VPC).', example='vpc-j6ctp4n75306****'),
    vpdId?: string(name='VpdId', description='Lingjun CIDR block ID', example='vpd-fuli****'),
  }(name='Content', description='The response parameters.'),
  message?: string(name='Message', description='The returned message.', example='success'),
  requestId?: string(name='RequestId', description='The ID of the request.', example='AC8C713A-A9F4-5984-A5E1-76496DF35153'),
}

model GetFabricTopologyResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: GetFabricTopologyResponseBody(name='body'),
}

/**
 * @summary Query the physical topology information of Lingjun network interface controller and Lingjun nodes under VPD.
 *
 * @param request GetFabricTopologyRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return GetFabricTopologyResponse
 */
async function getFabricTopologyWithOptions(request: GetFabricTopologyRequest, runtime: Util.RuntimeOptions): GetFabricTopologyResponse {
  Util.validateModel(request);
  var body : map[string]any = {};
  if (!Util.isUnset(request.clusterId)) {
    body['ClusterId'] = request.clusterId;
  }
  if (!Util.isUnset(request.lniIds)) {
    body['LniIds'] = request.lniIds;
  }
  if (!Util.isUnset(request.nodeIds)) {
    body['NodeIds'] = request.nodeIds;
  }
  if (!Util.isUnset(request.regionId)) {
    body['RegionId'] = request.regionId;
  }
  if (!Util.isUnset(request.vpcId)) {
    body['VpcId'] = request.vpcId;
  }
  if (!Util.isUnset(request.vpdId)) {
    body['VpdId'] = request.vpdId;
  }
  var req = new OpenApi.OpenApiRequest{ 
    body = OpenApiUtil.parseToMap(body),
  };
  var params = new OpenApi.Params{
    action = 'GetFabricTopology',
    version = '2022-05-30',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'POST',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Query the physical topology information of Lingjun network interface controller and Lingjun nodes under VPD.
 *
 * @param request GetFabricTopologyRequest
 * @return GetFabricTopologyResponse
 */
async function getFabricTopology(request: GetFabricTopologyRequest): GetFabricTopologyResponse {
  var runtime = new Util.RuntimeOptions{};
  return getFabricTopologyWithOptions(request, runtime);
}

model GetLeniPrivateIpAddressRequest {
  elasticNetworkInterfaceId?: string(name='ElasticNetworkInterfaceId', description='Lingjun Elastic Network Interface ID.

This parameter is required.', example='leni-1234****'),
  ipName?: string(name='IpName', description='Lingjun Elastic Network Interface secondary private IP unique identifier.

This parameter is required.', example='sip-8ylg****'),
  regionId?: string(name='RegionId', description='The region ID.

This parameter is required.', example='cn-wulanchabu'),
}

model GetLeniPrivateIpAddressResponseBody = {
  accessDeniedDetail?: string(name='AccessDeniedDetail', description='The details about the access denial.', example='None'),
  code?: int32(name='Code', description='The response status code.', example='0'),
  content?: {
    description?: string(name='Description', description='The description.', example='zhenyuan wdl workflow'),
    elasticNetworkInterfaceId?: string(name='ElasticNetworkInterfaceId', description='Lingjun Elastic Network Interface ID.', example='leni-1234****'),
    gmtCreate?: string(name='GmtCreate', description='The time when the activation code was created.', example='1663722356000'),
    gmtModified?: string(name='GmtModified', description='The time when the certificate was updated.', example='1635231890000'),
    ipName?: string(name='IpName', description='Lingjun Elastic Network Interface secondary private IP unique identifier.', example='sip-8ylg****'),
    message?: string(name='Message', description='The returned message.', example='message'),
    privateIpAddress?: string(name='PrivateIpAddress', description='Lingjun Elastic Network Interface secondary private IP address.', example='10.42.****'),
    regionId?: string(name='RegionId', description='The region ID.', example='cn-wulanchabu'),
    resourceGroupId?: string(name='ResourceGroupId'),
    status?: string(name='Status', description='The task status.', example='Available'),
  }(name='Content', description='The response data.'),
  message?: string(name='Message', description='The message.', example='success'),
  requestId?: string(name='RequestId', description='The request ID.', example='AC8C713A-A9F4-5984-A5E1-76496DF35153'),
}

model GetLeniPrivateIpAddressResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: GetLeniPrivateIpAddressResponseBody(name='body'),
}

/**
 * @summary Obtains the details of the secondary private IP address of a specified Lingjun Elastic Network Interface.
 *
 * @param request GetLeniPrivateIpAddressRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return GetLeniPrivateIpAddressResponse
 */
async function getLeniPrivateIpAddressWithOptions(request: GetLeniPrivateIpAddressRequest, runtime: Util.RuntimeOptions): GetLeniPrivateIpAddressResponse {
  Util.validateModel(request);
  var body : map[string]any = {};
  if (!Util.isUnset(request.elasticNetworkInterfaceId)) {
    body['ElasticNetworkInterfaceId'] = request.elasticNetworkInterfaceId;
  }
  if (!Util.isUnset(request.ipName)) {
    body['IpName'] = request.ipName;
  }
  if (!Util.isUnset(request.regionId)) {
    body['RegionId'] = request.regionId;
  }
  var req = new OpenApi.OpenApiRequest{ 
    body = OpenApiUtil.parseToMap(body),
  };
  var params = new OpenApi.Params{
    action = 'GetLeniPrivateIpAddress',
    version = '2022-05-30',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'POST',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Obtains the details of the secondary private IP address of a specified Lingjun Elastic Network Interface.
 *
 * @param request GetLeniPrivateIpAddressRequest
 * @return GetLeniPrivateIpAddressResponse
 */
async function getLeniPrivateIpAddress(request: GetLeniPrivateIpAddressRequest): GetLeniPrivateIpAddressResponse {
  var runtime = new Util.RuntimeOptions{};
  return getLeniPrivateIpAddressWithOptions(request, runtime);
}

model GetLniPrivateIpAddressRequest {
  ipName?: string(name='IpName', description='IP unique identifier

This parameter is required.', example='sip-xxxxx'),
  networkInterfaceId?: string(name='NetworkInterfaceId', description='Lingjun network interface controller ID

This parameter is required.', example='lni-bp18exxqa2rvfn45e5pz'),
  regionId?: string(name='RegionId', description='The region ID.

This parameter is required.', example='cn-wulanchabu'),
}

model GetLniPrivateIpAddressResponseBody = {
  accessDeniedDetail?: string(name='AccessDeniedDetail', description='The details about the access denial.', example='None'),
  code?: int32(name='Code', description='The response status code.', example='0'),
  content?: {
    description?: string(name='Description', description='The instance description.', example='test'),
    gmtCreate?: string(name='GmtCreate', description='The time when the data address was created.', example='2022-12-26 20:16:36'),
    ipAddressMac?: string(name='IpAddressMac', description='MAC address of the secondary private network', example='00-ff-84-15-ba-67'),
    ipName?: string(name='IpName', description='IP unique identifier', example='sip-xxxxx'),
    message?: string(name='Message', description='The error message. (If the instance is in the Exception state, the exception cause is prompted.)', example='You don\\\\"t have the permission of this operation, action=eflo:ListVpdRouteEntries, arn=acs:eflo:cn-wulanchabu:1263399219805497:vpd_rte/*, resourceGroup=null'),
    networkInterfaceId?: string(name='NetworkInterfaceId', description='Lingjun network interface controller ID', example='lni-2ze4uww7n6hsfzrwq77y'),
    privateIpAddress?: string(name='PrivateIpAddress', description='The secondary private IP address of the Lingjun network interface controller.', example='10.42.5.92'),
    regionId?: string(name='RegionId', description='The region ID.', example='cn-wulanchabu'),
    resourceGroupId?: string(name='ResourceGroupId'),
    status?: string(name='Status', description='The state of the rule.', example='Available'),
    subnetId?: string(name='SubnetId', description='The subnet instance ID.', example='subnet-aj93mko8'),
  }(name='Content', description='The response parameters.'),
  message?: string(name='Message', description='The error message. (If the instance is in the Exception state, the exception cause is prompted.)', example='You don\\\\"t have the permission of this operation, action=eflo:GetLniPrivateIpAddress, arn=acs:eflo:cn-wulanchabu:1382782317087063:networkinterface/00'),
  requestId?: string(name='RequestId', description='The request ID, which is used to locate and troubleshoot issues.', example='DBAD15D6-3F47-5B36-8A92-57C2919D13D0'),
}

model GetLniPrivateIpAddressResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: GetLniPrivateIpAddressResponseBody(name='body'),
}

/**
 * @summary Obtains the details about the secondary private IP address.
 *
 * @param request GetLniPrivateIpAddressRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return GetLniPrivateIpAddressResponse
 */
async function getLniPrivateIpAddressWithOptions(request: GetLniPrivateIpAddressRequest, runtime: Util.RuntimeOptions): GetLniPrivateIpAddressResponse {
  Util.validateModel(request);
  var body : map[string]any = {};
  if (!Util.isUnset(request.ipName)) {
    body['IpName'] = request.ipName;
  }
  if (!Util.isUnset(request.networkInterfaceId)) {
    body['NetworkInterfaceId'] = request.networkInterfaceId;
  }
  if (!Util.isUnset(request.regionId)) {
    body['RegionId'] = request.regionId;
  }
  var req = new OpenApi.OpenApiRequest{ 
    body = OpenApiUtil.parseToMap(body),
  };
  var params = new OpenApi.Params{
    action = 'GetLniPrivateIpAddress',
    version = '2022-05-30',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'POST',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Obtains the details about the secondary private IP address.
 *
 * @param request GetLniPrivateIpAddressRequest
 * @return GetLniPrivateIpAddressResponse
 */
async function getLniPrivateIpAddress(request: GetLniPrivateIpAddressRequest): GetLniPrivateIpAddressResponse {
  var runtime = new Util.RuntimeOptions{};
  return getLniPrivateIpAddressWithOptions(request, runtime);
}

model GetNetworkInterfaceRequest {
  networkInterfaceId?: string(name='NetworkInterfaceId', description='Lingjun network interface controller ID

This parameter is required.', example='lni-bp18exxqa2rvfn45e5pz'),
  regionId?: string(name='RegionId', description='The region ID.

This parameter is required.', example='cn-wulanchabu'),
  subnetId?: string(name='SubnetId', description='Subnet of Lingjun

This parameter is required.', example='subnet-f3zfzmnc'),
}

model GetNetworkInterfaceResponseBody = {
  accessDeniedDetail?: string(name='AccessDeniedDetail', description='The details about the access denial.', example='None'),
  code?: int32(name='Code', description='The response status code.', example='0'),
  content?: {
    createTime?: string(name='CreateTime', description='The time when the data address was created.', example='1678273219000'),
    ethernet?: [ string ](name='Ethernet', description='Port'),
    gateway?: string(name='Gateway', description='Gateway', example='172.24.20.254'),
    ip?: string(name='Ip', description='The IP address of the BE cluster.', example='203.107.60.69'),
    ncType?: string(name='NcType', description='NC Type

Valid value:

*   CUSTOM_LNI_INTEGRATION: two-network one-in-one architecture Lingjun hosting network interface controller.
*   CPU: CPU machine.
*   ELASTIC_6.2: Machine
*   GPU: GPU machine.
*   DEFAULT: the old CPU machine.
*   CUSTOM_LNI: two network separation architecture Lingjun hosting network interface controller.', example='DEFAULT'),
    networkInterfaceId?: string(name='NetworkInterfaceId', description='Lingjun network interface controller ID', example='lni-f8z4scmfh0u4ewv6vdd8'),
    networkInterfaceName?: string(name='NetworkInterfaceName', description='ENI Name', example='bond0'),
    nodeId?: string(name='NodeId', description='The ID of the host.', example='masterintranett2fdth5fkoocg'),
    privateIpAddressMacGroup?: [ 
      {
        description?: string(name='Description', description='The instance description.', example='test'),
        ipAddressMac?: string(name='IpAddressMac', description='Secondary private MAC address', example='01-00-5e-00-00-16'),
        ipName?: string(name='IpName', description='IP unique identifier', example='sip-xxxx'),
        message?: string(name='Message', description='The error message. (If the instance is in the Exception state, the exception cause is prompted.)', example='success'),
        privateIpAddress?: string(name='PrivateIpAddress', description='Secondary private IP address', example='172.23.161.57'),
        status?: string(name='Status', description='The state of the rule.', example='Available'),
      }
    ](name='PrivateIpAddressMacGroup', description='Secondary Private IP\\\\&MAC Address Collection'),
    quota?: int32(name='Quota', description='network interface controller private secondary IP limit', example='0'),
    regionId?: string(name='RegionId', description='The region ID.', example='cn-wulanchabu'),
    resourceGroupId?: string(name='ResourceGroupId'),
    serviceMac?: string(name='ServiceMac', description='Service network interface controller address', example='01-00-5e-00-00-16'),
    status?: string(name='Status', description='The status of the intervention entry. Valid value:', example='Available'),
    subnetBaseInfo?: {
      cidr?: string(name='Cidr', description='Network address segment', example='116.233.21.57/32'),
      createTime?: string(name='CreateTime', description='The time when the data address was created.', example='1678273219000'),
      subnetId?: string(name='SubnetId', description='The ID of the Subnet instance.', example='subnet-urb01blo'),
      subnetName?: string(name='SubnetName', description='The name of the Subnet instance.', example='subnet-1'),
    }(name='SubnetBaseInfo', description='Lingjun subnet (Subnet) basic information'),
    tenantId?: string(name='TenantId', description='The ID of the tenant.', example='1655449505171'),
    vpdBaseInfo?: {
      cidr?: string(name='Cidr', description='The network segment of the Lingjun subnet.

*   The network segment of the subnet must be a proper subset of the network segment of Lingjun to which it belongs, and the mask must be between 16 bits and 29 bits, which can provide 8 to 65536 addresses. For example, the CIDR block of the Lingjun CIDR block is 192.168.0.0/16, and the CIDR blocks of the subnets under the Lingjun CIDR block are 192.168.0.0/17 to 192.168.0.0/29.
*   The first and last three IP addresses of each subnet segment are reserved by the system. For example, the CIDR blocks of the subnet are 192.168.1.0/24,192.168.1.0, 192.168.1.253, 192.168.1.254, and 192.168.1.255.

For more information about CIDR blocks, see the [What is CIDR?](https://www.alibabacloud.com/help/doc-detail/40637.htm#title-gu4-uzk-12r) section in the "Network FAQ" topic.

This parameter is left empty by default.', example='172.18.0.0/24'),
      createTime?: string(name='CreateTime', description='The time when the data address was created.', example='1678273219000'),
      vpdId?: string(name='VpdId', description='The ID of the VPD instance.', example='vpd-ppdunxzc'),
      vpdName?: string(name='VpdName', description='The name of the VPD instance.', example='vpd-1'),
    }(name='VpdBaseInfo', description='Basic information of Lingjun network segment (VPD)'),
    zoneId?: string(name='ZoneId', description='The zone ID.', example='cn-wulanchabu-b'),
  }(name='Content', description='The response data. (If a resource has dependent resources, the existing dependent resources are returned.)'),
  message?: string(name='Message', description='The error message. (If the instance is in the Exception state, the exception cause is prompted.)', example='success'),
  requestId?: string(name='RequestId', description='Request ID of the current request', example='A88DFED5-24B7-5A3E-87DE-380BF06F3C90'),
}

model GetNetworkInterfaceResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: GetNetworkInterfaceResponseBody(name='body'),
}

/**
 * @summary Queries information about an LNI.
 *
 * @param request GetNetworkInterfaceRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return GetNetworkInterfaceResponse
 */
async function getNetworkInterfaceWithOptions(request: GetNetworkInterfaceRequest, runtime: Util.RuntimeOptions): GetNetworkInterfaceResponse {
  Util.validateModel(request);
  var body : map[string]any = {};
  if (!Util.isUnset(request.networkInterfaceId)) {
    body['NetworkInterfaceId'] = request.networkInterfaceId;
  }
  if (!Util.isUnset(request.regionId)) {
    body['RegionId'] = request.regionId;
  }
  if (!Util.isUnset(request.subnetId)) {
    body['SubnetId'] = request.subnetId;
  }
  var req = new OpenApi.OpenApiRequest{ 
    body = OpenApiUtil.parseToMap(body),
  };
  var params = new OpenApi.Params{
    action = 'GetNetworkInterface',
    version = '2022-05-30',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'POST',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Queries information about an LNI.
 *
 * @param request GetNetworkInterfaceRequest
 * @return GetNetworkInterfaceResponse
 */
async function getNetworkInterface(request: GetNetworkInterfaceRequest): GetNetworkInterfaceResponse {
  var runtime = new Util.RuntimeOptions{};
  return getNetworkInterfaceWithOptions(request, runtime);
}

model GetNodeInfoForPodRequest {
  nodeId?: string(name='NodeId', description='The ID of the node for this operation.

This parameter is required.', example='node-be70****'),
  regionId?: string(name='RegionId', description='The region ID.

This parameter is required.', example='cn-wulanchabu'),
}

model GetNodeInfoForPodResponseBody = {
  accessDeniedDetail?: string(name='AccessDeniedDetail', description='The details about the failed permission verification.', example='None'),
  code?: int32(name='Code', description='The response status code.', example='0'),
  content?: {
    clusterId?: string(name='ClusterId', description='The cluster ID.', example='cluster-****'),
    hdeniQuota?: int32(name='HdeniQuota', description='Lingjun Gaomi network interface controller quota', example='10'),
    leniQuota?: int32(name='LeniQuota', description='Lingjun Elastic Network Interface quota, including system type', example='10'),
    leniSipQuota?: int32(name='LeniSipQuota', description='Lingjun Elastic Network Interface Secondary Private IP Quota', example='10'),
    lniSipQuota?: int32(name='LniSipQuota', description='Lingjun network interface controller Secondary Private IP Quota', example='10'),
    nodeId?: string(name='NodeId', description='The ID of the node for this operation.', example='node-be70****'),
    regionId?: string(name='RegionId', description='The region ID.', example='cn-wulanchabu'),
    vSwitches?: [ string ](name='VSwitches', description='List of VSwitches that can apply for IP addresses on this node'),
    vpcId?: string(name='VpcId', description='The ID of the Virtual Private Cloud to which the current node belongs.', example='vpc-j6ctp4n75306****'),
    zoneId?: string(name='ZoneId', description='The zone ID.', example='cn-wulanchabu-b'),
  }(name='Content', description='The response parameters.'),
  message?: string(name='Message', description='The error message. (If the instance is in the Exception state, the exception cause is prompted.)', example='You don\\\\"t have the permission of this operation, action=eflo:GetNodeInfoForPod, arn=acs:eflo:cn-wulanchabu:1111156667137893:networkinterface/*, resourceGroup=null'),
  requestId?: string(name='RequestId', description='Request ID of the current request', example='9C50C9CD-E799-54DA-BA7A-1FAF3DF80857'),
}

model GetNodeInfoForPodResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: GetNodeInfoForPodResponseBody(name='body'),
}

/**
 * @summary Queries the network information of a node.
 *
 * @param request GetNodeInfoForPodRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return GetNodeInfoForPodResponse
 */
async function getNodeInfoForPodWithOptions(request: GetNodeInfoForPodRequest, runtime: Util.RuntimeOptions): GetNodeInfoForPodResponse {
  Util.validateModel(request);
  var body : map[string]any = {};
  if (!Util.isUnset(request.nodeId)) {
    body['NodeId'] = request.nodeId;
  }
  if (!Util.isUnset(request.regionId)) {
    body['RegionId'] = request.regionId;
  }
  var req = new OpenApi.OpenApiRequest{ 
    body = OpenApiUtil.parseToMap(body),
  };
  var params = new OpenApi.Params{
    action = 'GetNodeInfoForPod',
    version = '2022-05-30',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'POST',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Queries the network information of a node.
 *
 * @param request GetNodeInfoForPodRequest
 * @return GetNodeInfoForPodResponse
 */
async function getNodeInfoForPod(request: GetNodeInfoForPodRequest): GetNodeInfoForPodResponse {
  var runtime = new Util.RuntimeOptions{};
  return getNodeInfoForPodWithOptions(request, runtime);
}

model GetSubnetRequest {
  regionId?: string(name='RegionId', description='The region ID of the data center.', example='cn-wulanchabu'),
  subnetId?: string(name='SubnetId', description='The ID of the Lingjun subnet instance.

This parameter is required.', example='subnet-2avf0itf'),
  vpdId?: string(name='VpdId', description='The ID of the CIDR block to which Lingjun belongs.', example='vpd-cxcmdk1m'),
}

model GetSubnetResponseBody = {
  accessDeniedDetail?: string(name='AccessDeniedDetail', description='The details about the access denial.', example='None'),
  code?: int32(name='Code', description='The response status code.', example='0'),
  content?: {
    availableIps?: int32(name='AvailableIps', description='The number of available IP addresses.', example='1024'),
    cidr?: string(name='Cidr', description='The CIDR block of the Subnet.

*   The network segment of the subnet must be a proper subset of the network segment of Lingjun to which it belongs, and the mask must be between 16 bits and 29 bits, which can provide 8 to 65536 addresses. For example, the CIDR block of the Lingjun CIDR block is 192.168.0.0/16, and the CIDR blocks of the subnets under the Lingjun CIDR block are 192.168.0.0/17 to 192.168.0.0/29.
*   The first and last three IP addresses of each subnet segment are reserved by the system. For example, the CIDR blocks of the subnet are 192.168.1.0/24,192.168.1.0, 192.168.1.253, 192.168.1.254, and 192.168.1.255.', example='10.10.10.0/24'),
    createTime?: string(name='CreateTime', description='The time when the activation code was created.', example='1648085472000'),
    gmtModified?: string(name='GmtModified', description='The time when the O\\\\&M task was modified.', example='1678273219000'),
    lbCount?: long(name='LbCount', description='The number of SLB.', example='0'),
    message?: string(name='Message', description='The error message. (If the instance is in the Exception state, the exception cause is prompted.)', example='test example'),
    ncCount?: int32(name='NcCount', description='The number of NCs.', example='16'),
    networkInterfaceCount?: int32(name='NetworkInterfaceCount', description='Number of Lingjun network interface controller', example='4'),
    privateIpCount?: long(name='PrivateIpCount', description='The total number of secondary private IP addresses.', example='20'),
    regionId?: string(name='RegionId', description='The region ID.', example='cn-wulanchabu'),
    resourceGroupId?: string(name='ResourceGroupId', description='The ID of your Alibaba Cloud resource group.', example='rg-aek2l4sq6l7unhi'),
    status?: string(name='Status', description='The status of the cache reserve instance.', example='Available'),
    subnetId?: string(name='SubnetId', description='The ID of the Lingjun subnet instance.', example='subnet-aj93mko8'),
    subnetName?: string(name='SubnetName', description='The name of the Lingjun subnet instance.', example='subnet-1'),
    tags?: [ 
      {
        tagKey?: string(name='TagKey', description='The tag key.

You cannot specify an empty string as a tag key. It can be up to 64 characters in length and cannot start with aliyun or acs:. It cannot contain http:// or https://.

You can specify at most 20 tag keys in each call.', example='tag-subnet'),
        tagValue?: string(name='TagValue', description='The value of the tag that is added to the resource.

The tag value can be empty or a string of up to 128 characters. It cannot start with aliyun or acs:, and cannot contain http:// or https://.

Each key-value pair must be unique. You can specify values for at most 20 tag keys in each call.', example='subnet-group-1'),
      }
    ](name='Tags', description='The tag information.

You can specify up to 20 tags.'),
    tenantId?: string(name='TenantId', description='The tenant ID.', example='1655449505171'),
    type?: string(name='Type', description='Lingjun Subnet Usage Type; optional; optional. Valid values:

*   **Empty for common data types**
*   **OOB** :OOB type
*   **LB**: LB type', example='OOB'),
    vpdBaseInfo?: {
      cidr?: string(name='Cidr', description='The CIDR block of the VPD.

*   We recommend that you use an RFC private endpoint as the Lingjun CIDR block, such as 10.0.0.0/8,172.16.0.0/12,192.168.0.0/16. In scenarios where the Doringjun CIDR block is connected to each other or where the Lingjun CIDR block is connected to a VPC, make sure that the addresses do not conflict with each other.
*   You can also use a custom CIDR block other than 100.64.0.0/10, 224.0.0.0/4, 127.0.0.0/8, or 169.254.0.0/16 and their subnets as the primary IPv4 CIDR block of the VPD.', example='10.0.0.0/8'),
      createTime?: string(name='CreateTime', description='The time when the activation code was created.', example='1678273219000'),
      vpdId?: string(name='VpdId', description='The ID of the Lingjun CIDR block.', example='vpd-iv2zm1qf'),
      vpdName?: string(name='VpdName', description='The name of the Lingjun CIDR block.', example='vpd-1'),
    }(name='VpdBaseInfo', description='The information about the network segment of Lingjun.'),
    vpdId?: string(name='VpdId', description='The ID of the Lingjun CIDR block.', example='vpd-ze3na0wf'),
    zoneId?: string(name='ZoneId', description='The zone ID.', example='cn-wulanchabu-b'),
  }(name='Content', description='The response data.'),
  message?: string(name='Message', description='The error message. (If the instance is in the Exception state, the exception cause is prompted.)', example='success'),
  requestId?: string(name='RequestId', description='The request ID.', example='0901F411-28FA-5B9C-BAEE-7776463FF0DC'),
}

model GetSubnetResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: GetSubnetResponseBody(name='body'),
}

/**
 * @summary Queries the details of a Lingjun subnet, including the type, CIDR block, instance ID, instance status, and number of NCs.
 *
 * @param request GetSubnetRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return GetSubnetResponse
 */
async function getSubnetWithOptions(request: GetSubnetRequest, runtime: Util.RuntimeOptions): GetSubnetResponse {
  Util.validateModel(request);
  var body : map[string]any = {};
  if (!Util.isUnset(request.regionId)) {
    body['RegionId'] = request.regionId;
  }
  if (!Util.isUnset(request.subnetId)) {
    body['SubnetId'] = request.subnetId;
  }
  if (!Util.isUnset(request.vpdId)) {
    body['VpdId'] = request.vpdId;
  }
  var req = new OpenApi.OpenApiRequest{ 
    body = OpenApiUtil.parseToMap(body),
  };
  var params = new OpenApi.Params{
    action = 'GetSubnet',
    version = '2022-05-30',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'POST',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Queries the details of a Lingjun subnet, including the type, CIDR block, instance ID, instance status, and number of NCs.
 *
 * @param request GetSubnetRequest
 * @return GetSubnetResponse
 */
async function getSubnet(request: GetSubnetRequest): GetSubnetResponse {
  var runtime = new Util.RuntimeOptions{};
  return getSubnetWithOptions(request, runtime);
}

model GetVccRequest {
  clientToken?: string(name='ClientToken', description='By default, popApi is not ignored and idempotent', example='c5e3130a-d02f-11ec-a7d3-0242ac110005'),
  enablePage?: boolean(name='EnablePage', description='Paging Parameters: The current parameters are obsolete.', example='false'),
  pageNumber?: int32(name='PageNumber', description='Paging Parameters: The current parameters are obsolete.', example='1'),
  pageSize?: int32(name='PageSize', description='Paging Parameters: The current parameters are obsolete.', example='20'),
  regionId?: string(name='RegionId', description='The region ID.', example='cn-wulanchabu'),
  vccId?: string(name='VccId', description='The ID of the Lingjun connection instance.

This parameter is required.', example='vcc-cn-zvp2w222001'),
}

model GetVccResponseBody = {
  accessDeniedDetail?: string(name='AccessDeniedDetail', description='The details about the access denial.', example='None'),
  code?: int32(name='Code', description='The response status code.', example='0'),
  content?: {
    accessPointId?: string(name='AccessPointId', description='Express Connect circuit access point ID:

*   **ap-cn-wulanchabu-jn-ts-A**: Ulanqab-Jining-A
*   **ap-cn-heyuan-yc-ts-SA127**: Heyuan-Yuancheng-A', example='ap-cn-wulanchabu-jn-ts-A'),
    aliyunRouterInfo?: [ 
      {
        localGatewayIp?: string(name='LocalGatewayIp', description='IPv4 address of Alibaba Cloud-side interconnection', example='169.254.248.30'),
        mask?: string(name='Mask', description='Masking', example='255.255.255.248'),
        pcId?: string(name='PcId', description='Express Connect circuit ID', example='pc-0jlof4bphlsnxbdztkvad'),
        peerGatewayIp?: string(name='PeerGatewayIp', description='Lingjun Side Interconnection IPv4 Address', example='169.254.248.28'),
        vbrId?: string(name='VbrId', description='The ID of the VBR.', example='vbr-2ze4i85p6vb9nwcan5xt0'),
        vlanId?: string(name='VlanId', description='VLAN ID of the VBR', example='1042'),
      }
    ](name='AliyunRouterInfo', description='Alibaba Cloud route information list'),
    attachErStatus?: boolean(name='AttachErStatus', description='Whether Lingjun HUB has been bound to a network instance

*   **true**: Bound
*   **false**: unbound', example='true'),
    bandwidth?: int32(name='Bandwidth', description='bandwidth', example='20'),
    bandwidthStr?: string(name='BandwidthStr', description='The bandwidth of the port.', example='1G'),
    bgpAsn?: string(name='BgpAsn', description='BGP AS number', example='45644'),
    bgpCidr?: string(name='BgpCidr', description='BGP CIDR block', example='10.4.0.0/24'),
    cenId?: string(name='CenId', description='The ID of the CEN instance; [What is the CEN?](https://help.aliyun.com/document_detail/181681.html)

You can call the [DescribeCens](https://help.aliyun.com/document_detail/468215.htm) to query the information of CEN instances under the current Alibaba Cloud account.', example='cen-m2iskbojlvda5w65fp'),
    cenOwnerId?: string(name='CenOwnerId', description='Account to which the CEN belongs', example='1620939556166279'),
    cisRouterInfo?: [ 
      {
        ccInfos?: [ 
          {
            ccId?: string(name='CcId', description='Leased Line ID', example='cc-73aeex5o'),
            localGatewayIp?: string(name='LocalGatewayIp', description='Lingjun Side Interconnection IPv4 Address', example='169.254.248.26'),
            remoteGatewayIp?: string(name='RemoteGatewayIp', description='Lingjun Side Interconnection IPv4 Address', example='169.254.248.30'),
            status?: string(name='Status', description='The state of the rule.', example='Established'),
            subnetMask?: string(name='SubnetMask', description='Subnet mask', example='255.255.255.248'),
            vlanId?: string(name='VlanId', description='Vlan ID of the leased line', example='Ethernet1042'),
          }
        ](name='CcInfos', description='Leased Line Information List'),
        ccrId?: string(name='CcrId', description='The ID of the on-cloud router instance.', example='ccr-1ms84am0'),
      }
    ](name='CisRouterInfo', description='Lingjun Network Routing Information List'),
    commodityCode?: string(name='CommodityCode', description='Commodity code', example='bccluster_cloudconnectionpre_public_cn'),
    connectionType?: string(name='ConnectionType', description='The connection mode. Valid values:

*   **VPC**
*   **CENTR**', example='CENTR'),
    createTime?: string(name='CreateTime', description='The time when the data address was created.', example='1648085472000'),
    currentNode?: string(name='CurrentNode', description='Current Node', example='task-xxx-node-x'),
    duration?: string(name='Duration', description='Cycle', example='1'),
    erInfos?: [ 
      {
        connections?: long(name='Connections', description='Connections', example='2'),
        createTime?: string(name='CreateTime', description='The time when the data address was created.', example='1678379917000'),
        description?: string(name='Description', description='Description', example='this is test.'),
        erId?: string(name='ErId', description='Lingjun HUB ID', example='er-p68b0jwn'),
        erName?: string(name='ErName', description='Lingjun HUB Instance Name', example='er-1'),
        gmtModified?: string(name='GmtModified', description='The time when the agent was last modified.', example='1678379917000'),
        masterZoneId?: string(name='MasterZoneId', description='Primary Zone', example='cn-wulanchabu-b'),
        message?: string(name='Message', description='The message that is returned.', example='test message'),
        regionId?: string(name='RegionId', description='Lingjun HUB Region Information', example='cn-wulanchabu'),
        routeMaps?: long(name='RouteMaps', description='Number of routing policy', example='2'),
        status?: string(name='Status', description='The status of the intervention entry. Valid value:', example='Available'),
        tenantId?: string(name='TenantId', description='The ID of the tenant.', example='1620939556166277'),
      }
    ](name='ErInfos', description='List of bound Lingjun HUB information'),
    expirationDate?: string(name='ExpirationDate', description='The time when the application expired.', example='1678379917000'),
    gmtModified?: string(name='GmtModified', description='The time when the agent was last modified.', example='1648085472000'),
    internetChargeType?: string(name='InternetChargeType', description='The billing method for network usage.

*   **PayByTraffic**: pay-by-traffic
*   **PayByBandwidth**: pay-by-bandwidth', example='PayByBandwidth'),
    lineOperator?: string(name='LineOperator', description='The connectivity provider of the Express Connect circuit. Valid values:

*   **CO**: other connectivity providers in the Chinese mainland', example='CO'),
    message?: string(name='Message', description='The error message. (If the instance is in the Exception state, the exception cause is prompted.)', example='You don\\\\"t have the permission of this operation, action=eflo:GetVcc, arn=acs:eflo:cn-heyuan:1263399219805497:vcc/vcc-cn-fhh3yxjwe01, resourceGroup=null'),
    payType?: string(name='PayType', description='The billing method of the instance. Valid values:

*   **PREPAY**: subscription
*   **POSTPAY**: pay-as-you-go', example='PrePay'),
    portType?: string(name='PortType', description='The port type of the Express Connect circuit. Valid values:

*   **100GBase-LR**: 100,000 megabytes of single-mode optical port (10 km)', example='100GBase-LR'),
    pricingCycle?: string(name='PricingCycle', description='The billing cycle. Valid values:

*   **Month**: Billed on a monthly basis
*   **Year**: Billed on an annual basis', example='Month'),
    regionId?: string(name='RegionId', description='The region ID.', example='cn-wulanchabu'),
    resourceGroupId?: string(name='ResourceGroupId', description='The ID of your Alibaba Cloud resource group.

For more information about resource groups, see [Resource groups](https://help.aliyun.com/document_detail/94475.htm).', example='rg-aek2l4sq6l7unhi'),
    spec?: string(name='Spec', description='Specification; value:

*   **Large**: Large', example='Large'),
    status?: string(name='Status', description='The status of the cache reserve instance. Valid values:

*   **Available**: Normal.
*   **Not Available**: Not available.
*   **Executing**: The task is being executed.
*   **Deleting**: The account is being deleted', example='Available'),
    tags?: [ 
      {
        tagKey?: string(name='TagKey', description='The tag key.

You cannot specify an empty string as a tag key. It can be up to 64 characters in length and cannot start with aliyun or acs:. It cannot contain http:// or https://.

You can specify at most 20 tag keys in each call.', example='tag-vcc'),
        tagValue?: string(name='TagValue', description='The value of the tag that is added to the resource.

The tag value can be empty or a string of up to 128 characters. It cannot start with aliyun or acs:, and cannot contain http:// or https://.

Each key-value pair must be unique. You can specify values for at most 20 tag keys in each call.', example='vcc-group-1'),
      }
    ](name='Tags', description='The tag information.

You can specify up to 20 tags.'),
    tenantId?: string(name='TenantId', description='The ID of the tenant.', example='1620939556166279'),
    vSwitchId?: string(name='VSwitchId', description='The ID of the vSwitch. [Virtual Private Cloud VSwitch](https://help.aliyun.com/document_detail/100380.html).

You can call the [DescribeVSwitches](https://help.aliyun.com/document_detail/35748.html) operation to query created vSwitches.', example='vsw-uf6u8473r84e6n1n19he5'),
    vbrInfos?: [ 
      {
        cenId?: string(name='CenId', description='CEN ID', example='cen-cx0qua8q6cm4z9****'),
        gmtCreate?: string(name='GmtCreate', description='The time when the data address was created.', example='1683250981000'),
        gmtModified?: string(name='GmtModified', description='The time when the agent was last modified.', example='1673578603000'),
        status?: string(name='Status', description='The status of the VBR. Valid values:

*   unconfirmed
*   active: The VPN gateway is in a normal state.
*   terminating: The connection is being terminated.
*   terminated: The connection is terminated.
*   recovering: The task is being recovered.
*   deleting: The GDN is being deleted.
*   Available: The service is available.', example='Available'),
        vbrBgpPeers?: [ 
          {
            bgpGroupId?: string(name='BgpGroupId', description='BGP Group ID', example='bgpg-2ze2sit2vakrkapvy****'),
            bgpPeerId?: string(name='BgpPeerId', description='BGP peer ID', example='bgp-uf6heugif9enu48rj****'),
            peerAsn?: string(name='PeerAsn', description='Peer AS No.', example='98765****'),
            peerIpAddress?: string(name='PeerIpAddress', description='BGP peer IP address', example='169.254.****'),
            status?: string(name='Status', description='The status of the BGP peer. Valid values:

*   Pending: pending
*   Available: The route is available.
*   Modifying: being modified
*   Deleting: The IPv4 gateway is being deleted.
*   Deleted
*   Not Available', example='Available'),
          }
        ](name='VbrBgpPeers', description='BGP neighbor information list'),
        vbrId?: string(name='VbrId', description='The ID of the border router.', example='vbr-wz96agu9h3d50z****'),
      }
    ](name='VbrInfos', description='Information list of border routers'),
    vccId?: string(name='VccId', description='The ID of the Lingjun connection instance.', example='vcc-cn-cqf2xh40101'),
    vccName?: string(name='VccName', description='The name of the Lingjun connection instance.', example='vcc-heyuan-backup'),
    vpcId?: string(name='VpcId', description='Virtual Private Cloud IDs; [What is Virtual Private Cloud](https://help.aliyun.com/document_detail/34217.html)

You can call the [DescribeVpcs](https://help.aliyun.com/document_detail/35739.html#demo-0) operation to query the specified VPC.', example='vpc-j6ctp4n75306phv5tmpsm'),
    vpdBaseInfo?: {
      cidr?: string(name='Cidr', description='Network address segment', example='172.18.0.0/24'),
      createTime?: string(name='CreateTime', description='The time when the data address was created.', example='1678379917000'),
      vpdId?: string(name='VpdId', description='Lingjun CIDR block instance ID', example='vpd-ppdunxzc'),
      vpdName?: string(name='VpdName', description='Lingjun CIDR block instance name', example='yzp-rg-test3'),
    }(name='VpdBaseInfo', description='Lingjun network segment information (applicable to the scene where the old version of Lingjun connection is directly bound to Lingjun network segment)'),
    vpdId?: string(name='VpdId', description='Lingjun CIDR block instance ID', example='vpd-d3isyds4'),
    zoneId?: string(name='ZoneId', description='The zone ID.', example='cn-wulanchabu-b'),
  }(name='Content', description='The response parameters.'),
  message?: string(name='Message', description='The error message. (If the instance is in the Exception state, the exception cause is prompted.)', example='success'),
  requestId?: string(name='RequestId', description='Request ID of the current request', example='CAD09E47-B651-5206-B2DC-3AB78C8EB446'),
}

model GetVccResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: GetVccResponseBody(name='body'),
}

/**
 * @summary Queries the details of a Lingjun connection, including the specification, Express Connect circuit access port type, instance status, bandwidth, and BGP CIDR block.
 *
 * @param request GetVccRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return GetVccResponse
 */
async function getVccWithOptions(request: GetVccRequest, runtime: Util.RuntimeOptions): GetVccResponse {
  Util.validateModel(request);
  var body : map[string]any = {};
  if (!Util.isUnset(request.clientToken)) {
    body['ClientToken'] = request.clientToken;
  }
  if (!Util.isUnset(request.enablePage)) {
    body['EnablePage'] = request.enablePage;
  }
  if (!Util.isUnset(request.pageNumber)) {
    body['PageNumber'] = request.pageNumber;
  }
  if (!Util.isUnset(request.pageSize)) {
    body['PageSize'] = request.pageSize;
  }
  if (!Util.isUnset(request.regionId)) {
    body['RegionId'] = request.regionId;
  }
  if (!Util.isUnset(request.vccId)) {
    body['VccId'] = request.vccId;
  }
  var req = new OpenApi.OpenApiRequest{ 
    body = OpenApiUtil.parseToMap(body),
  };
  var params = new OpenApi.Params{
    action = 'GetVcc',
    version = '2022-05-30',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'POST',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Queries the details of a Lingjun connection, including the specification, Express Connect circuit access port type, instance status, bandwidth, and BGP CIDR block.
 *
 * @param request GetVccRequest
 * @return GetVccResponse
 */
async function getVcc(request: GetVccRequest): GetVccResponse {
  var runtime = new Util.RuntimeOptions{};
  return getVccWithOptions(request, runtime);
}

model GetVccGrantRuleRequest {
  erId?: string(name='ErId', description='Lingjun HUB Instance ID', example='er-aueyxxsy'),
  grantRuleId?: string(name='GrantRuleId', description='Authorized Resource Instance ID

This parameter is required.', example='grant-rule-jaj34d75h01'),
  grantTenantId?: string(name='GrantTenantId', description='Authorized Tenant ID', example='1620939556166277'),
  instanceId?: string(name='InstanceId', description='Authorized Instance ID', example='vcc-cn-jaj34d75h01'),
  regionId?: string(name='RegionId', description='The ID of the region. This parameter is required.

This parameter is required.', example='cn-wulanchabu'),
}

model GetVccGrantRuleResponseBody = {
  accessDeniedDetail?: string(name='AccessDeniedDetail', description='The details about the access denial.', example='None'),
  code?: int32(name='Code', description='The response status code.', example='0'),
  content?: {
    createTime?: string(name='CreateTime', description='The time when the data address was created.', example='1648085472000'),
    erId?: string(name='ErId', description='Lingjun HUB Instance ID', example='er-aueyxxsy'),
    grantRuleId?: string(name='GrantRuleId', description='Authorized Resource ID', example='grant-rule-jaj34d75h01'),
    grantTenantId?: string(name='GrantTenantId', description='Authorized Tenant ID', example='1620939556166277'),
    instanceId?: string(name='InstanceId', description='Network Instance ID', example='vcc-cn-jaj34d75h01'),
    instanceName?: string(name='InstanceName', description='Network Instance Name', example='vcc-1'),
    product?: string(name='Product', description='Network Product Code:

*   **VPD**: Lingjun CIDR block
*   **VCC**: Lingjun Connection', example='VCC'),
    regionId?: string(name='RegionId', description='The region ID.', example='cn-wulanchabu'),
    resourceGroupId?: string(name='ResourceGroupId', description='Resource group instance ID', example='rg-aek2l4sq6l7unhi'),
    tenantId?: string(name='TenantId', description='The ID of the tenant.', example='1620939556166279'),
    used?: boolean(name='Used', description='Whether the current authorization information has been used; optional values:

*   **true**: Used
*   **false**: Not used', example='false'),
  }(name='Content', description='The returned data.'),
  message?: string(name='Message', description='The error message. (If the instance is in the Exception state, the exception cause is prompted.)', example='success'),
  requestId?: string(name='RequestId', description='Request ID of the current request', example='0901F411-28FA-5B9C-BAEE-7776463FF0DC'),
}

model GetVccGrantRuleResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: GetVccGrantRuleResponseBody(name='body'),
}

/**
 * @summary Queries the details of cross-account resource authorization for a Lingjun connection, including the authorized tenant ID, Lingjun HUB instance ID, and network instance ID.
 *
 * @param request GetVccGrantRuleRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return GetVccGrantRuleResponse
 */
async function getVccGrantRuleWithOptions(request: GetVccGrantRuleRequest, runtime: Util.RuntimeOptions): GetVccGrantRuleResponse {
  Util.validateModel(request);
  var body : map[string]any = {};
  if (!Util.isUnset(request.erId)) {
    body['ErId'] = request.erId;
  }
  if (!Util.isUnset(request.grantRuleId)) {
    body['GrantRuleId'] = request.grantRuleId;
  }
  if (!Util.isUnset(request.grantTenantId)) {
    body['GrantTenantId'] = request.grantTenantId;
  }
  if (!Util.isUnset(request.instanceId)) {
    body['InstanceId'] = request.instanceId;
  }
  if (!Util.isUnset(request.regionId)) {
    body['RegionId'] = request.regionId;
  }
  var req = new OpenApi.OpenApiRequest{ 
    body = OpenApiUtil.parseToMap(body),
  };
  var params = new OpenApi.Params{
    action = 'GetVccGrantRule',
    version = '2022-05-30',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'POST',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Queries the details of cross-account resource authorization for a Lingjun connection, including the authorized tenant ID, Lingjun HUB instance ID, and network instance ID.
 *
 * @param request GetVccGrantRuleRequest
 * @return GetVccGrantRuleResponse
 */
async function getVccGrantRule(request: GetVccGrantRuleRequest): GetVccGrantRuleResponse {
  var runtime = new Util.RuntimeOptions{};
  return getVccGrantRuleWithOptions(request, runtime);
}

model GetVccRouteEntryRequest {
  regionId?: string(name='RegionId', description='The region ID.

This parameter is required.', example='cn-wulanchabu'),
  vccId?: string(name='VccId', description='Lingjun Connection ID

This parameter is required.', example='vcc-cn-zvp2w222001'),
  vccRouteEntryId?: string(name='VccRouteEntryId', description='The ID of the route entry.

This parameter is required.', example='vcc-rte-31ocvdhq'),
}

model GetVccRouteEntryResponseBody = {
  accessDeniedDetail?: string(name='AccessDeniedDetail', description='The details about the access denial.', example='None'),
  code?: int32(name='Code', description='The response status code.', example='0'),
  content?: {
    destinationCidrBlock?: string(name='DestinationCidrBlock', description='Destination CIDR Block', example='0.0.0.0/0'),
    gmtModified?: string(name='GmtModified', description='The time when the agent was last modified.', example='1648085472000'),
    message?: string(name='Message', description='The message that is returned.', example='Successful'),
    nextHopId?: string(name='NextHopId', description='Next Hop Instance', example='local'),
    nextHopType?: string(name='NextHopType', description='Next Hop Type', example='VCC'),
    regionId?: string(name='RegionId', description='The region ID.', example='cn-wulanchabu'),
    resourceGroupId?: string(name='ResourceGroupId', description='Resource group instance ID', example='rg-aek2l4sq6l7u***'),
    routeType?: string(name='RouteType', description='Route type', example='System'),
    status?: string(name='Status', description='The status of the intervention entry. Valid value:', example='Available'),
    tenantId?: string(name='TenantId', description='The ID of the tenant.', example='1655449505171'),
    vccId?: string(name='VccId', description='The ID of the Lingjun connection instance.', example='vcc-cn-zvp2w222001'),
    vccRouteEntryId?: string(name='VccRouteEntryId', description='The ID of the route entry.', example='vcc-rte-31ocvdhq'),
  }(name='Content', description='The response parameters.'),
  message?: string(name='Message', description='The error message. (If the instance is in the Exception state, the exception cause is prompted.)', example='success'),
  requestId?: string(name='RequestId', description='Request ID of the current request', example='BDBCC783-84CA-5733-8EEA-645C88B9009C'),
}

model GetVccRouteEntryResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: GetVccRouteEntryResponseBody(name='body'),
}

/**
 * @summary Queries route entries.
 *
 * @param request GetVccRouteEntryRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return GetVccRouteEntryResponse
 */
async function getVccRouteEntryWithOptions(request: GetVccRouteEntryRequest, runtime: Util.RuntimeOptions): GetVccRouteEntryResponse {
  Util.validateModel(request);
  var body : map[string]any = {};
  if (!Util.isUnset(request.regionId)) {
    body['RegionId'] = request.regionId;
  }
  if (!Util.isUnset(request.vccId)) {
    body['VccId'] = request.vccId;
  }
  if (!Util.isUnset(request.vccRouteEntryId)) {
    body['VccRouteEntryId'] = request.vccRouteEntryId;
  }
  var req = new OpenApi.OpenApiRequest{ 
    body = OpenApiUtil.parseToMap(body),
  };
  var params = new OpenApi.Params{
    action = 'GetVccRouteEntry',
    version = '2022-05-30',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'POST',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Queries route entries.
 *
 * @param request GetVccRouteEntryRequest
 * @return GetVccRouteEntryResponse
 */
async function getVccRouteEntry(request: GetVccRouteEntryRequest): GetVccRouteEntryResponse {
  var runtime = new Util.RuntimeOptions{};
  return getVccRouteEntryWithOptions(request, runtime);
}

model GetVpdRequest {
  regionId?: string(name='RegionId', description='The region ID.

This parameter is required.', example='cn-wulanchabu'),
  vpdId?: string(name='VpdId', description='The ID of the VPD instance.

This parameter is required.', example='vpd-ze3na0wf'),
}

model GetVpdResponseBody = {
  accessDeniedDetail?: string(name='AccessDeniedDetail', description='The details about the access denial.', example='None'),
  code?: int32(name='Code', description='The response status code.', example='0'),
  content?: {
    attachErStatus?: boolean(name='AttachErStatus', description='Whether the Lingjun HUB(ER) has been bound.

*   **true**: ER is bound.
*   **false**: No ER is bound.', example='true'),
    cidr?: string(name='Cidr', description='The CIDR block.', example='10.0.0.0/8'),
    createTime?: string(name='CreateTime', description='The time when the activation code was created.', example='1678273219000'),
    erInfos?: [ 
      {
        connections?: long(name='Connections', description='The number of connections.', example='2'),
        createTime?: string(name='CreateTime', description='The time when the activation code was created.', example='1678273219000'),
        description?: string(name='Description', description='The description of the synchronization task.', example='Restore verifying'),
        erId?: string(name='ErId', description='The ID of the Elastic Router (ER) instance.', example='er-a7rqv1rq'),
        erName?: string(name='ErName', description='Elastic Router (ER) Instance Name', example='er-1'),
        gmtModified?: string(name='GmtModified', description='The time when the O\\\\&M task was modified.', example='1678273219000'),
        masterZoneId?: string(name='MasterZoneId', description='The primary zone.', example='cn-wulanchabu-b'),
        message?: string(name='Message', description='The returned message.', example='success'),
        regionId?: string(name='RegionId', description='The ID of the region to which the Elastic Router (ER) belongs.', example='cn-wulanchabu'),
        routeMaps?: long(name='RouteMaps', description='The number of routing policy.', example='2'),
        status?: string(name='Status', description='The task status.', example='Available'),
        tenantId?: string(name='TenantId', description='The tenant ID.', example='t464p4fql1bog'),
      }
    ](name='ErInfos', description='The information of the bound Lingjun HUB(ER).'),
    gmtModified?: string(name='GmtModified', description='The time when the O\\\\&M task was modified.', example='2023-10-25 15:57:16'),
    message?: string(name='Message', description='The error message. (If the instance is in the Exception state, the exception cause is prompted.)', example='success'),
    ncCount?: int32(name='NcCount', description='The number of NCs.', example='16'),
    networkInterfaceCount?: int32(name='NetworkInterfaceCount', description='Number of Lingjun network interface controller.', example='1'),
    privateIpCount?: long(name='PrivateIpCount', description='The total number of secondary private IP addresses.', example='10'),
    quota?: int32(name='Quota', description='The total quota information.', example='10'),
    regionId?: string(name='RegionId', description='The region ID.', example='cn-wulanchabu'),
    resourceGroupId?: string(name='ResourceGroupId', description='The ID of your Alibaba Cloud resource group.

For more information about resource groups, see [Resource groups](https://help.aliyun.com/document_detail/94475.htm?spm=a2c4g.11186623.0.0.29e15d7akXhpuu).', example='rg-aek2l4sq6l7unhi'),
    secondaryCidrBlocks?: [ string ](name='SecondaryCidrBlocks', description='The list of additional CIDR blocks.'),
    serviceCidr?: string(name='ServiceCidr', description='Internal Service CIDR block.', example='169.254.252.0/23'),
    status?: string(name='Status', description='The current state of the instance.

Valid value:

*   Not Available: Not Available.
*   Available: Normal: Available: Normal.
*   Deleting: Deleting: Deleting: Deleting.
*   Executing: executing: Executing: executing.', example='Available'),
    subnetCount?: long(name='SubnetCount', description='The number of subnets.', example='1'),
    tags?: [ 
      {
        tagKey?: string(name='TagKey', description='The tag key.

You cannot specify an empty string as a tag key. It can be up to 64 characters in length and cannot start with aliyun or acs:. It cannot contain http:// or https://.

You can specify at most 20 tag keys in each call.', example='tag-subent-region'),
        tagValue?: string(name='TagValue', description='The value of the tag that is added to the resource.

The tag value can be empty or a string of up to 128 characters. It cannot start with aliyun or acs:, and cannot contain http:// or https://.

Each key-value pair must be unique. You can specify values for at most 20 tag keys in each call.', example='cn-wulanchabu'),
      }
    ](name='Tags', description='The tag information.

You can specify up to 20 tags.'),
    tenantId?: string(name='TenantId', description='The tenant ID.', example='1620939556166279'),
    vpdId?: string(name='VpdId', description='The ID of the VPD instance.', example='vpd-fuliephf'),
    vpdName?: string(name='VpdName', description='The name of the Lingjun CIDR block.', example='vpd-1'),
  }(name='Content', description='The data returned.'),
  message?: string(name='Message', description='The additional information that is returned.', example='success'),
  requestId?: string(name='RequestId', description='The request ID.', example='A88DFED5-24B7-5A3E-87DE-380BF06F3C90'),
}

model GetVpdResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: GetVpdResponseBody(name='body'),
}

/**
 * @summary Queries the details of a Lingjun CIDR block, including the status of the Lingjun CIDR block, the CIDR block, the number of subnets and NCs.
 *
 * @param request GetVpdRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return GetVpdResponse
 */
async function getVpdWithOptions(request: GetVpdRequest, runtime: Util.RuntimeOptions): GetVpdResponse {
  Util.validateModel(request);
  var body : map[string]any = {};
  if (!Util.isUnset(request.regionId)) {
    body['RegionId'] = request.regionId;
  }
  if (!Util.isUnset(request.vpdId)) {
    body['VpdId'] = request.vpdId;
  }
  var req = new OpenApi.OpenApiRequest{ 
    body = OpenApiUtil.parseToMap(body),
  };
  var params = new OpenApi.Params{
    action = 'GetVpd',
    version = '2022-05-30',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'POST',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Queries the details of a Lingjun CIDR block, including the status of the Lingjun CIDR block, the CIDR block, the number of subnets and NCs.
 *
 * @param request GetVpdRequest
 * @return GetVpdResponse
 */
async function getVpd(request: GetVpdRequest): GetVpdResponse {
  var runtime = new Util.RuntimeOptions{};
  return getVpdWithOptions(request, runtime);
}

model GetVpdGrantRuleRequest {
  erId?: string(name='ErId', description='Lingjun HUB Instance Id', example='er-kkopgtne'),
  grantRuleId?: string(name='GrantRuleId', description='Authorized Resource Instance ID

This parameter is required.', example='grant-rule-xrgvqazb'),
  grantTenantId?: string(name='GrantTenantId', description='Authorized Tenant ID', example='1620939556166277'),
  instanceId?: string(name='InstanceId', description='Authorized Instance ID', example='vpd-xxxxxxxx'),
  regionId?: string(name='RegionId', description='The ID of the region. This parameter is required.

This parameter is required.', example='cn-wulanchabu'),
}

model GetVpdGrantRuleResponseBody = {
  accessDeniedDetail?: string(name='AccessDeniedDetail', description='The details about the access denial.', example='None'),
  code?: int32(name='Code', description='The response status code.', example='0'),
  content?: {
    createTime?: string(name='CreateTime', description='The time when the data address was created.', example='1648085472000'),
    erId?: string(name='ErId', description='Lingjun HUB Instance ID', example='er-kkopgtne'),
    grantRuleId?: string(name='GrantRuleId', description='Authorized Resource ID', example='grant-rule-xxxxxx'),
    grantTenantId?: string(name='GrantTenantId', description='Authorized Tenant ID', example='1620939556166277'),
    instanceId?: string(name='InstanceId', description='Network Instance ID', example='vpd-xxxxxxxxxx'),
    instanceName?: string(name='InstanceName', description='Network Instance Name', example='vpd-lingjun'),
    product?: string(name='Product', description='Network Product Code:

*   **VPD**: Lingjun CIDR block
*   **VCC**: Lingjun Connection', example='VPD'),
    regionId?: string(name='RegionId', description='The region ID.', example='cn-wulanchabu'),
    resourceGroupId?: string(name='ResourceGroupId', description='Resource group instance ID', example='rg-aek2l4sq6l7u***'),
    tenantId?: string(name='TenantId', description='The ID of the tenant.', example='1655449505171'),
    used?: boolean(name='Used', description='Whether the current authorization information has been used; default is false', example='0'),
  }(name='Content', description='The response parameters.'),
  message?: string(name='Message', description='The error message. (If the instance is in the Exception state, the exception cause is prompted.)', example='success'),
  requestId?: string(name='RequestId', description='Request ID of the current request', example='9C50C9CD-E799-54DA-BA7A-1FAF3DF80857'),
}

model GetVpdGrantRuleResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: GetVpdGrantRuleResponseBody(name='body'),
}

/**
 * @summary Queries the details of cross-account resource authorization for a Lingjun CIDR block, including the authorized tenant ID, Lingjun HUB instance ID, and network instance ID.
 *
 * @param request GetVpdGrantRuleRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return GetVpdGrantRuleResponse
 */
async function getVpdGrantRuleWithOptions(request: GetVpdGrantRuleRequest, runtime: Util.RuntimeOptions): GetVpdGrantRuleResponse {
  Util.validateModel(request);
  var body : map[string]any = {};
  if (!Util.isUnset(request.erId)) {
    body['ErId'] = request.erId;
  }
  if (!Util.isUnset(request.grantRuleId)) {
    body['GrantRuleId'] = request.grantRuleId;
  }
  if (!Util.isUnset(request.grantTenantId)) {
    body['GrantTenantId'] = request.grantTenantId;
  }
  if (!Util.isUnset(request.instanceId)) {
    body['InstanceId'] = request.instanceId;
  }
  if (!Util.isUnset(request.regionId)) {
    body['RegionId'] = request.regionId;
  }
  var req = new OpenApi.OpenApiRequest{ 
    body = OpenApiUtil.parseToMap(body),
  };
  var params = new OpenApi.Params{
    action = 'GetVpdGrantRule',
    version = '2022-05-30',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'POST',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Queries the details of cross-account resource authorization for a Lingjun CIDR block, including the authorized tenant ID, Lingjun HUB instance ID, and network instance ID.
 *
 * @param request GetVpdGrantRuleRequest
 * @return GetVpdGrantRuleResponse
 */
async function getVpdGrantRule(request: GetVpdGrantRuleRequest): GetVpdGrantRuleResponse {
  var runtime = new Util.RuntimeOptions{};
  return getVpdGrantRuleWithOptions(request, runtime);
}

model GetVpdRouteEntryRequest {
  regionId?: string(name='RegionId', description='The region ID.

This parameter is required.', example='cn-wulanchabu'),
  vpdId?: string(name='VpdId', description='Lingjun CIDR block instance ID

This parameter is required.', example='vpd-iv2zm1qf'),
  vpdRouteEntryId?: string(name='VpdRouteEntryId', description='The ID of the route entry instance.

This parameter is required.', example='vpd-rte-toekyqel'),
}

model GetVpdRouteEntryResponseBody = {
  accessDeniedDetail?: string(name='AccessDeniedDetail', description='The details about the access denial.', example='None'),
  code?: int32(name='Code', description='The response status code.', example='0'),
  content?: {
    destinationCidrBlock?: string(name='DestinationCidrBlock', description='Destination CIDR block', example='0.0.0.0/0'),
    gmtModified?: string(name='GmtModified', description='The time when the agent was last modified.', example='1678273219000'),
    nextHopId?: string(name='NextHopId', description='Next Hop Instance', example='er-bmlqiym1'),
    nextHopType?: string(name='NextHopType', description='Next Hop Instance Type', example='ER'),
    regionId?: string(name='RegionId', description='The region ID.', example='cn-wulanchabu'),
    resourceGroupId?: string(name='ResourceGroupId', description='Resource group instance ID', example='rg-acfmv7mcq63uyhq'),
    routeType?: string(name='RouteType', description='Route type', example='BGP'),
    status?: string(name='Status', description='The status of the intervention entry. Valid value:', example='Available'),
    tenantId?: string(name='TenantId', description='The ID of the tenant.', example='1655449505171'),
    vpdId?: string(name='VpdId', description='Lingjun CIDR block instance ID', example='vpd-ze3na0wf'),
    vpdRouteEntryId?: string(name='VpdRouteEntryId', description='Lingjun CIDR block route entry ID', example='vpd-rte-toekyqel'),
  }(name='Content', description='The response parameters.'),
  message?: string(name='Message', description='The error message. (If the instance is in the Exception state, the exception cause is prompted.)', example='success'),
  requestId?: string(name='RequestId', description='Request ID of the current request', example='9C50C9CD-E799-54DA-BA7A-1FAF3DF80857'),
}

model GetVpdRouteEntryResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: GetVpdRouteEntryResponseBody(name='body'),
}

/**
 * @summary Queries route entries.
 *
 * @param request GetVpdRouteEntryRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return GetVpdRouteEntryResponse
 */
async function getVpdRouteEntryWithOptions(request: GetVpdRouteEntryRequest, runtime: Util.RuntimeOptions): GetVpdRouteEntryResponse {
  Util.validateModel(request);
  var body : map[string]any = {};
  if (!Util.isUnset(request.regionId)) {
    body['RegionId'] = request.regionId;
  }
  if (!Util.isUnset(request.vpdId)) {
    body['VpdId'] = request.vpdId;
  }
  if (!Util.isUnset(request.vpdRouteEntryId)) {
    body['VpdRouteEntryId'] = request.vpdRouteEntryId;
  }
  var req = new OpenApi.OpenApiRequest{ 
    body = OpenApiUtil.parseToMap(body),
  };
  var params = new OpenApi.Params{
    action = 'GetVpdRouteEntry',
    version = '2022-05-30',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'POST',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Queries route entries.
 *
 * @param request GetVpdRouteEntryRequest
 * @return GetVpdRouteEntryResponse
 */
async function getVpdRouteEntry(request: GetVpdRouteEntryRequest): GetVpdRouteEntryResponse {
  var runtime = new Util.RuntimeOptions{};
  return getVpdRouteEntryWithOptions(request, runtime);
}

model InitializeVccRequest {
  resourceGroupId?: string(name='ResourceGroupId', description='The resource group ID.

For more information about resource groups, see [Resource groups](https://help.aliyun.com/document_detail/94475.htm?spm=a2c4g.11186623.0.0.29e15d7akXhpuu).', example='rg-acfmxhucx5ewuwy'),
}

model InitializeVccResponseBody = {
  accessDeniedDetail?: string(name='AccessDeniedDetail', description='The details about the access denial.', example='None'),
  code?: int32(name='Code', description='The response status code.', example='0'),
  content?: {
    requestId?: string(name='RequestId', description='The request ID.', example='E30DA7CB-03D0-51EB-8F18-856B99987E18'),
    roleName?: string(name='RoleName', description='Linked Role of Lingjun Connection Instance (AliyunServiceRoleForEfloVcc)', example='CloudConnectionOperationRole'),
  }(name='Content', description='The response parameters.'),
  message?: string(name='Message', description='The error message. (If the instance is in the Exception state, the exception cause is prompted.)', example='success'),
  requestId?: string(name='RequestId', description='The request ID.', example='E30DA7CB-03D0-51EB-8F18-856B99987E18'),
}

model InitializeVccResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: InitializeVccResponseBody(name='body'),
}

/**
 * @summary Initialize the Lingjun connection and authorize Intelligent Computing Lingjun to create an SLR in your account.
 *
 * @param request InitializeVccRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return InitializeVccResponse
 */
async function initializeVccWithOptions(request: InitializeVccRequest, runtime: Util.RuntimeOptions): InitializeVccResponse {
  Util.validateModel(request);
  var body : map[string]any = {};
  if (!Util.isUnset(request.resourceGroupId)) {
    body['ResourceGroupId'] = request.resourceGroupId;
  }
  var req = new OpenApi.OpenApiRequest{ 
    body = OpenApiUtil.parseToMap(body),
  };
  var params = new OpenApi.Params{
    action = 'InitializeVcc',
    version = '2022-05-30',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'POST',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Initialize the Lingjun connection and authorize Intelligent Computing Lingjun to create an SLR in your account.
 *
 * @param request InitializeVccRequest
 * @return InitializeVccResponse
 */
async function initializeVcc(request: InitializeVccRequest): InitializeVccResponse {
  var runtime = new Util.RuntimeOptions{};
  return initializeVccWithOptions(request, runtime);
}

model ListElasticNetworkInterfacesRequest {
  elasticNetworkInterfaceId?: string(name='ElasticNetworkInterfaceId', description='Lingjun Elastic Network Interface ID', example='leni-1234****'),
  ip?: string(name='Ip', description='The IP address of the BE cluster.', example='10.0.0.1'),
  networkType?: string(name='NetworkType', description='The network type.

Valid value:

*   Tenant: Tenant.
*   VPC', example='tenant'),
  nodeId?: string(name='NodeId', description='The ID of the node.', example='e01-cn-lbj3aej****'),
  pageNumber?: int32(name='PageNumber', description='The page number of the page to return. Pages start from page 1. Default value: 1.', example='1'),
  pageSize?: int32(name='PageSize', description='The number of entries to return on each page. Default value: 20.', example='10'),
  regionId?: string(name='RegionId', description='The region ID.

This parameter is required.', example='cn-wulanchabu'),
  resourceGroupId?: string(name='ResourceGroupId'),
  status?: string(name='Status', description='The status of the enterprise-level snapshot policy.

Valid value:

*   Create Failed: the creation failure.
*   Delete Failed: the that failed to be deleted.
*   Executing
*   Available: The template is available.
*   Deleting', example='Available'),
  type?: string(name='Type', description='The type of the variable.

Valid value:

*   CUSTOM: custom type.
*   DEFAULT: system type.', example='DEFAULT'),
  vSwitchId?: string(name='VSwitchId', description='The vSwitch ID.', example='vsw-uf6u8473r84e9****'),
  vpcId?: string(name='VpcId', description='The ID of the virtual private cloud (VPC).', example='vpc-uf6aa4ddo97fr****'),
  zoneId?: string(name='ZoneId', description='The zone ID.', example='cn-wulanchabu-b'),
}

model ListElasticNetworkInterfacesResponseBody = {
  accessDeniedDetail?: string(name='AccessDeniedDetail', description='The details about the access denial.', example='None'),
  code?: int32(name='Code', description='The response status code.', example='0'),
  content?: {
    data?: [ 
      {
        createTime?: string(name='CreateTime', description='The time when the data address was created.', example='1601176751000'),
        description?: string(name='Description', description='The instance description.', example='No description'),
        elasticNetworkInterfaceId?: string(name='ElasticNetworkInterfaceId', description='Lingjun Elastic Network Interface ID', example='leni-1234****'),
        gateway?: string(name='Gateway', description='vswitch gateway address', example='172.16.****'),
        gmtModified?: string(name='GmtModified', description='The time when the agent was last modified.', example='1640187007000'),
        ip?: string(name='Ip', description='The IP address of the BE cluster.', example='10.0.0.13'),
        mac?: string(name='Mac', description='mac address', example='E0:01:A6:4A:6A:D0'),
        mask?: string(name='Mask', description='vswitch mask bits', example='24'),
        message?: string(name='Message', description='The error message.', example='success'),
        nodeId?: string(name='NodeId', description='The ID of the node.', example='e01-cn-uax37m1****'),
        regionId?: string(name='RegionId', description='The region ID.', example='cn-wulanchabu'),
        resourceGroupId?: string(name='ResourceGroupId'),
        securityGroupId?: string(name='SecurityGroupId', description='The ID of the security group.', example='sg-f8z4wr1b41x3qsc9****'),
        status?: string(name='Status', description='The status of the intervention entry. Valid value:', example='Available'),
        type?: string(name='Type', description='network interface controller type, the default type DEFAULT cannot be manually released

Valid value:

*   CUSTOM: custom type.
*   DEFAULT: system type.', example='DEFAULT'),
        vSwitchId?: string(name='VSwitchId', description='The ID of the vSwitch.', example='vsw-uf6u8473r84e9****'),
        vpcId?: string(name='VpcId', description='The ID of the virtual private cloud (VPC).', example='vpc-f8ziirfl9k25h2qn7****'),
        zoneId?: string(name='ZoneId', description='The zone ID.', example='cn-wulanchabu-b'),
      }
    ](name='Data', description='lingjun Elastic Network Interface information list'),
    total?: long(name='Total', description='The total number of entries returned.', example='100'),
  }(name='Content', description='The response parameters.'),
  message?: string(name='Message', description='The return message.', example='success'),
  requestId?: string(name='RequestId', description='Request ID of the current request', example='AC8C713A-A9F4-5984-A5E1-76496DF35153'),
}

model ListElasticNetworkInterfacesResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: ListElasticNetworkInterfacesResponseBody(name='body'),
}

/**
 * @summary Queries the LENIs that are associated with a Lingjun node.
 *
 * @param request ListElasticNetworkInterfacesRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return ListElasticNetworkInterfacesResponse
 */
async function listElasticNetworkInterfacesWithOptions(request: ListElasticNetworkInterfacesRequest, runtime: Util.RuntimeOptions): ListElasticNetworkInterfacesResponse {
  Util.validateModel(request);
  var body : map[string]any = {};
  if (!Util.isUnset(request.elasticNetworkInterfaceId)) {
    body['ElasticNetworkInterfaceId'] = request.elasticNetworkInterfaceId;
  }
  if (!Util.isUnset(request.ip)) {
    body['Ip'] = request.ip;
  }
  if (!Util.isUnset(request.networkType)) {
    body['NetworkType'] = request.networkType;
  }
  if (!Util.isUnset(request.nodeId)) {
    body['NodeId'] = request.nodeId;
  }
  if (!Util.isUnset(request.pageNumber)) {
    body['PageNumber'] = request.pageNumber;
  }
  if (!Util.isUnset(request.pageSize)) {
    body['PageSize'] = request.pageSize;
  }
  if (!Util.isUnset(request.regionId)) {
    body['RegionId'] = request.regionId;
  }
  if (!Util.isUnset(request.resourceGroupId)) {
    body['ResourceGroupId'] = request.resourceGroupId;
  }
  if (!Util.isUnset(request.status)) {
    body['Status'] = request.status;
  }
  if (!Util.isUnset(request.type)) {
    body['Type'] = request.type;
  }
  if (!Util.isUnset(request.vSwitchId)) {
    body['VSwitchId'] = request.vSwitchId;
  }
  if (!Util.isUnset(request.vpcId)) {
    body['VpcId'] = request.vpcId;
  }
  if (!Util.isUnset(request.zoneId)) {
    body['ZoneId'] = request.zoneId;
  }
  var req = new OpenApi.OpenApiRequest{ 
    body = OpenApiUtil.parseToMap(body),
  };
  var params = new OpenApi.Params{
    action = 'ListElasticNetworkInterfaces',
    version = '2022-05-30',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'POST',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Queries the LENIs that are associated with a Lingjun node.
 *
 * @param request ListElasticNetworkInterfacesRequest
 * @return ListElasticNetworkInterfacesResponse
 */
async function listElasticNetworkInterfaces(request: ListElasticNetworkInterfacesRequest): ListElasticNetworkInterfacesResponse {
  var runtime = new Util.RuntimeOptions{};
  return listElasticNetworkInterfacesWithOptions(request, runtime);
}

model ListErAttachmentsRequest {
  autoReceiveAllRoute?: boolean(name='AutoReceiveAllRoute', description='Whether to automatically receive all routes from all instances under this Lingjun HUB. Valid values:

*   **true**: received automatically.
*   **false**: Not received.', example='true'),
  enablePage?: boolean(name='EnablePage', description='Specifies whether to enable paged query. Valid values:

*   **true**: enables paged query.
*   **false**: Paged query is not enabled.', example='false'),
  erAttachmentId?: string(name='ErAttachmentId', description='The ID of the network instance connection', example='er-attachment-i1ioibyf'),
  erAttachmentName?: string(name='ErAttachmentName', description='The name of the network instance connection.', example='vcc-cn-209300qha01'),
  erId?: string(name='ErId', description='The ID of the Lingjun HUB instance.

This parameter is required.', example='er-kkopgtne'),
  instanceId?: string(name='InstanceId', description='The ID of the network instance. Valid values: **VPD** and **VCC**.

For more information, see [What is Lingjun?](https://help.aliyun.com/document_detail/444430.html)

You can query **Lingjun CIDR blocks** and **Lingjun connections** by [ListVpds](https://help.aliyun.com/document_detail/2331077.html) and [ListVccs](https://help.aliyun.com/document_detail/2399526.html?) respectively.', example='vcc-cn-209300qha01'),
  instanceType?: string(name='InstanceType', description='The mitigation plan of the instance. Valid values:

*   **VPD**: indicates the Lingjun CIDR block.
*   **VCC**: indicates a Lingjun connection.', example='VCC'),
  pageNumber?: int32(name='PageNumber', description='The page number to return. Pages start from page 1. Default value: 1.', example='1'),
  pageSize?: int32(name='PageSize', description='The number of entries per page. Default value: 20.', example='20'),
  regionId?: string(name='RegionId', description='The region ID.

This parameter is required.', example='cn-wulanchabu'),
  resourceGroupId?: string(name='ResourceGroupId', description='Resource group instance ID', example='rg-aekzb3n5lgk2ieq'),
  resourceTenantId?: string(name='ResourceTenantId', description='The ID of the tenant to which the instance belongs.', example='1111156667137893'),
  status?: string(name='Status', description='The status of the CLB instance. Valid values:

*   **Available**: Normal.
*   **Not Available**: Not available.
*   **Executing**: The task is being executed.
*   **Deleting**: The account is being deleted', example='Available'),
}

model ListErAttachmentsResponseBody = {
  accessDeniedDetail?: string(name='AccessDeniedDetail', description='The details about the access denial.', example='None'),
  code?: int32(name='Code', description='The response status code.', example='0'),
  content?: {
    data?: [ 
      {
        across?: boolean(name='Across', description='Whether to cross accounts. Valid values:

*   **true**: The network instance is a cross-account resource.
*   **false**: The current network instance is a resource of the current account.', example='false'),
        autoReceiveAllRoute?: boolean(name='AutoReceiveAllRoute', description='Whether to automatically receive all routes from all instances under this Lingjun HUB. Valid values:

*   **true**: received automatically.
*   **false**: Not received.', example='true'),
        createTime?: string(name='CreateTime', description='The time when the activation code was created.', example='1669734207000'),
        erAttachmentId?: string(name='ErAttachmentId', description='The ID of the Lingjun HUB network instance.', example='er-attachment-i1ioibyf'),
        erAttachmentName?: string(name='ErAttachmentName', description='The name of the Lingjun HUB network instance.', example='vcc-cn-209300qha01'),
        erId?: string(name='ErId', description='The ID of the Lingjun HUB instance.', example='er-kkopgtne'),
        gmtModified?: string(name='GmtModified', description='The time when the O\\\\&M task was modified.', example='1640187007000'),
        instanceId?: string(name='InstanceId', description='The ID of the network instance. Valid values: **VPD** and **VCC**.

For more information, see [What is Lingjun?](https://help.aliyun.com/document_detail/444430.html)

You can query **Lingjun CIDR blocks** and **Lingjun connections** by [ListVpds](https://help.aliyun.com/document_detail/2331077.html) and [ListVccs](https://help.aliyun.com/document_detail/2399526.html) respectively.', example='vcc-cn-209300qha02'),
        instanceName?: string(name='InstanceName', description='The instance name.', example='vcc-wulanchabu-main'),
        instanceType?: string(name='InstanceType', description='The database type. Valid values:

*   **VPD**: indicates the Lingjun CIDR block.
*   **VCC**: indicates a Lingjun connection.', example='VCC'),
        message?: string(name='Message', description='The returned message.', example='test'),
        regionId?: string(name='RegionId', description='Lingjun HUB region information.', example='cn-wulanchabu'),
        resourceGroupId?: string(name='ResourceGroupId', description='Resource group instance ID', example='rg-aekzlki4ehfse4y'),
        resourceTenantId?: string(name='ResourceTenantId', description='The ID of the tenant to which the resource belongs.', example='1111156667137893'),
        status?: string(name='Status', description='The status of the cache reserve instance. Valid values:

*   **Available**: Normal.
*   **Not Available**: Not available.
*   **Executing**: The task is being executed.
*   **Deleting**: The account is being deleted', example='Available'),
        tenantId?: string(name='TenantId', description='The tenant ID.', example='1655449505171'),
      }
    ](name='Data', description='The list of Lingjun HUB network instances.'),
    total?: long(name='Total', description='The total number of entries that are returned.', example='0'),
  }(name='Content', description='The data returned.'),
  message?: string(name='Message', description='The error message. (If the instance is in the Exception state, the exception cause is displayed.)', example='success'),
  requestId?: string(name='RequestId', description='The request ID.', example='3D9D6E7B-365B-5200-BFA6-9B79E269058C'),
}

model ListErAttachmentsResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: ListErAttachmentsResponseBody(name='body'),
}

/**
 * @summary Queries network instance connections.
 *
 * @param request ListErAttachmentsRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return ListErAttachmentsResponse
 */
async function listErAttachmentsWithOptions(request: ListErAttachmentsRequest, runtime: Util.RuntimeOptions): ListErAttachmentsResponse {
  Util.validateModel(request);
  var body : map[string]any = {};
  if (!Util.isUnset(request.autoReceiveAllRoute)) {
    body['AutoReceiveAllRoute'] = request.autoReceiveAllRoute;
  }
  if (!Util.isUnset(request.enablePage)) {
    body['EnablePage'] = request.enablePage;
  }
  if (!Util.isUnset(request.erAttachmentId)) {
    body['ErAttachmentId'] = request.erAttachmentId;
  }
  if (!Util.isUnset(request.erAttachmentName)) {
    body['ErAttachmentName'] = request.erAttachmentName;
  }
  if (!Util.isUnset(request.erId)) {
    body['ErId'] = request.erId;
  }
  if (!Util.isUnset(request.instanceId)) {
    body['InstanceId'] = request.instanceId;
  }
  if (!Util.isUnset(request.instanceType)) {
    body['InstanceType'] = request.instanceType;
  }
  if (!Util.isUnset(request.pageNumber)) {
    body['PageNumber'] = request.pageNumber;
  }
  if (!Util.isUnset(request.pageSize)) {
    body['PageSize'] = request.pageSize;
  }
  if (!Util.isUnset(request.regionId)) {
    body['RegionId'] = request.regionId;
  }
  if (!Util.isUnset(request.resourceGroupId)) {
    body['ResourceGroupId'] = request.resourceGroupId;
  }
  if (!Util.isUnset(request.resourceTenantId)) {
    body['ResourceTenantId'] = request.resourceTenantId;
  }
  if (!Util.isUnset(request.status)) {
    body['Status'] = request.status;
  }
  var req = new OpenApi.OpenApiRequest{ 
    body = OpenApiUtil.parseToMap(body),
  };
  var params = new OpenApi.Params{
    action = 'ListErAttachments',
    version = '2022-05-30',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'POST',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Queries network instance connections.
 *
 * @param request ListErAttachmentsRequest
 * @return ListErAttachmentsResponse
 */
async function listErAttachments(request: ListErAttachmentsRequest): ListErAttachmentsResponse {
  var runtime = new Util.RuntimeOptions{};
  return listErAttachmentsWithOptions(request, runtime);
}

model ListErRouteEntriesRequest {
  destinationCidrBlock?: string(name='DestinationCidrBlock', description='Destination CIDR Block', example='0.0.0.0/0'),
  enablePage?: boolean(name='EnablePage', description='Specifies whether to enable pagination query.', example='false'),
  erId?: string(name='ErId', description='Lingjun HUB ID

This parameter is required.', example='er-kkopgtne'),
  ignoreDetailedRouteEntry?: boolean(name='IgnoreDetailedRouteEntry', description='Filter 32 detailed CIDR blocks. Default value: true', example='true'),
  instanceId?: string(name='InstanceId', description='Network Instance ID', example='vcc-cn-209300qha01'),
  nextHopId?: string(name='NextHopId', description='Next Hop Instance', example='vcc-cn-209300qha01'),
  nextHopType?: string(name='NextHopType', description='Next Hop Instance Type', example='VCC'),
  pageNumber?: int32(name='PageNumber', description='The page number of the page to return. Pages start from page 1. Default value: 1.', example='1'),
  pageSize?: int32(name='PageSize', description='The number of entries per page. Default value: 20.', example='20'),
  regionId?: string(name='RegionId', description='The region ID.

This parameter is required.', example='cn-wulanchabu'),
  resourceGroupId?: string(name='ResourceGroupId', description='Resource group instance ID', example='rg-acfmyuzlx2iihcy'),
  routeType?: string(name='RouteType', description='Route type', example='VCC'),
  status?: string(name='Status', description='The status of the enterprise-level snapshot policy.', example='Available'),
}

model ListErRouteEntriesResponseBody = {
  accessDeniedDetail?: string(name='AccessDeniedDetail', description='The details about the access denial.', example='None'),
  code?: int32(name='Code', description='The response status code.', example='0'),
  content?: {
    data?: [ 
      {
        destinationCidrBlock?: string(name='DestinationCidrBlock', description='Destination CIDR Block', example='100.64.1.100/32'),
        erId?: string(name='ErId', description='Lingjun HUB Instance ID', example='er-kkopgtne'),
        erRouteEntryId?: string(name='ErRouteEntryId', description='The ID of the route entry.', example='er-rte-maysfadg'),
        gmtModified?: string(name='GmtModified', description='The time when the cluster was updated.', example='1640930901000'),
        nextHopId?: string(name='NextHopId', description='Next Hop Instance', example='vcc-cn-209300qha01'),
        nextHopType?: string(name='NextHopType', description='Next Hop Instance Type', example='VCC'),
        regionId?: string(name='RegionId', description='The region ID.', example='cn-wulanchabu'),
        resourceGroupId?: string(name='ResourceGroupId', description='Resource group instance ID', example='rg-aekzb3n5lgk2ieq'),
        resourceTenantId?: string(name='ResourceTenantId', description='The ID of the tenant to which the resource belongs.', example='1111156667137893'),
        routeType?: string(name='RouteType', description='Route type', example='VCC'),
        status?: string(name='Status', description='The task status. Valid values:

*   Synchronizing
*   Available', example='Available'),
        tenantId?: string(name='TenantId', description='The ID of the tenant.', example='1111156667137893'),
      }
    ](name='Data', description='Lingjun HUB Route Entry Information List'),
    total?: long(name='Total', description='The total number of entries returned.', example='0'),
  }(name='Content', description='The response parameters.'),
  message?: string(name='Message', description='The error message. (If the instance is in the Exception state, the exception cause is prompted.)', example='success'),
  requestId?: string(name='RequestId', description='Request ID of the current request', example='A88DFED5-24B7-5A3E-87DE-380BF06F3C90'),
}

model ListErRouteEntriesResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: ListErRouteEntriesResponseBody(name='body'),
}

/**
 * @summary Queries the route entries of the Lingjun HUB.
 *
 * @param request ListErRouteEntriesRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return ListErRouteEntriesResponse
 */
async function listErRouteEntriesWithOptions(request: ListErRouteEntriesRequest, runtime: Util.RuntimeOptions): ListErRouteEntriesResponse {
  Util.validateModel(request);
  var body : map[string]any = {};
  if (!Util.isUnset(request.destinationCidrBlock)) {
    body['DestinationCidrBlock'] = request.destinationCidrBlock;
  }
  if (!Util.isUnset(request.enablePage)) {
    body['EnablePage'] = request.enablePage;
  }
  if (!Util.isUnset(request.erId)) {
    body['ErId'] = request.erId;
  }
  if (!Util.isUnset(request.ignoreDetailedRouteEntry)) {
    body['IgnoreDetailedRouteEntry'] = request.ignoreDetailedRouteEntry;
  }
  if (!Util.isUnset(request.instanceId)) {
    body['InstanceId'] = request.instanceId;
  }
  if (!Util.isUnset(request.nextHopId)) {
    body['NextHopId'] = request.nextHopId;
  }
  if (!Util.isUnset(request.nextHopType)) {
    body['NextHopType'] = request.nextHopType;
  }
  if (!Util.isUnset(request.pageNumber)) {
    body['PageNumber'] = request.pageNumber;
  }
  if (!Util.isUnset(request.pageSize)) {
    body['PageSize'] = request.pageSize;
  }
  if (!Util.isUnset(request.regionId)) {
    body['RegionId'] = request.regionId;
  }
  if (!Util.isUnset(request.resourceGroupId)) {
    body['ResourceGroupId'] = request.resourceGroupId;
  }
  if (!Util.isUnset(request.routeType)) {
    body['RouteType'] = request.routeType;
  }
  if (!Util.isUnset(request.status)) {
    body['Status'] = request.status;
  }
  var req = new OpenApi.OpenApiRequest{ 
    body = OpenApiUtil.parseToMap(body),
  };
  var params = new OpenApi.Params{
    action = 'ListErRouteEntries',
    version = '2022-05-30',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'POST',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Queries the route entries of the Lingjun HUB.
 *
 * @param request ListErRouteEntriesRequest
 * @return ListErRouteEntriesResponse
 */
async function listErRouteEntries(request: ListErRouteEntriesRequest): ListErRouteEntriesResponse {
  var runtime = new Util.RuntimeOptions{};
  return listErRouteEntriesWithOptions(request, runtime);
}

model ListErRouteMapsRequest {
  destinationCidrBlock?: string(name='DestinationCidrBlock', description='Destination CIDR Block', example='0.0.0.0/0'),
  enablePage?: boolean(name='EnablePage', description='Specifies whether to enable paged query.', example='false'),
  erId?: string(name='ErId', description='Elastic Router ID

This parameter is required.', example='er-kkopgtne'),
  erRouteMapId?: string(name='ErRouteMapId', description='routing policy ID', example='er-rmap-uwglhzom'),
  erRouteMapNum?: int32(name='ErRouteMapNum', description='Policy number (default for automatic creation is 3000; The value range of the policy number manually created by the user is 1001-2000)', example='1001'),
  pageNumber?: int32(name='PageNumber', description='The page number of the page to return. Pages start from page 1. Default value: 1.', example='1'),
  pageSize?: int32(name='PageSize', description='The number of entries to return on each page. Default value: 10.', example='10'),
  receptionInstanceId?: string(name='ReceptionInstanceId', description='Receive Instance ID', example='vpd-x2lohgpv'),
  receptionInstanceName?: string(name='ReceptionInstanceName', description='Receive Instance Name', example='vpd2'),
  receptionInstanceType?: string(name='ReceptionInstanceType', description='The type of the received instance. Optional values:

*   **VPD**: Lingjun network segment.
*   **VCC**: Lingjun Connection.', example='VPD'),
  regionId?: string(name='RegionId', description='The region ID.

This parameter is required.', example='cn-wulanchabu'),
  resourceGroupId?: string(name='ResourceGroupId', description='Resource group instance ID', example='rg-acfmzaq3ypaqkdy'),
  routeMapAction?: string(name='RouteMapAction', description='Policy behavior; optional values:

*   **permit**: Allow
*   **deny**: Rejected', example='deny'),
  transmissionInstanceId?: string(name='TransmissionInstanceId', description='Release Instance ID', example='vpd-xsdlg2xb'),
  transmissionInstanceName?: string(name='TransmissionInstanceName', description='Release Instance Name', example='vpd1'),
  transmissionInstanceType?: string(name='TransmissionInstanceType', description='The type of the published instance. Optional values:

*   **VPD**: Lingjun network segment.
*   **VCC**: Lingjun Connection.', example='VPD'),
}

model ListErRouteMapsResponseBody = {
  accessDeniedDetail?: string(name='AccessDeniedDetail', description='The details about the access denial.', example='None'),
  code?: int32(name='Code', description='The response status code.', example='0'),
  content?: {
    data?: [ 
      {
        action?: string(name='Action', description='Policy behavior; optional values:

*   **permit**: Allow
*   **deny**: Prohibited', example='permit'),
        createTime?: string(name='CreateTime', description='The time when the data address was created.', example='1601176751000'),
        description?: string(name='Description', description='Policy description', example='No description'),
        destinationCidrBlock?: string(name='DestinationCidrBlock', description='Destination CIDR Block', example='0.0.0.0/0'),
        erId?: string(name='ErId', description='Lingjun HUB ID', example='er-kkopgtne'),
        erRouteMapId?: string(name='ErRouteMapId', description='routing policy ID', example='er-rmap-uwglhzom'),
        gmtModified?: string(name='GmtModified', description='The time when the agent was last modified.', example='1601176751000'),
        message?: string(name='Message', description='The message that is returned.', example='success'),
        receptionInstanceId?: string(name='ReceptionInstanceId', description='Receive Instance ID', example='vpd-9rgxqazc'),
        receptionInstanceName?: string(name='ReceptionInstanceName', description='Receive Instance Name', example='vpd-reception'),
        receptionInstanceOwner?: string(name='ReceptionInstanceOwner', description='The tenant to which the receiving instance belongs', example='1620939556166277'),
        receptionInstanceType?: string(name='ReceptionInstanceType', description='The type of the received instance. Possible values:

*   **VPD**: Lingjun network segment.
*   **VCC**: Lingjun Connection.', example='VPD'),
        regionId?: string(name='RegionId', description='The region ID.', example='cn-wulanchabu'),
        resourceGroupId?: string(name='ResourceGroupId', description='Resource group instance ID', example='rg-aek2l4sq6l7unhi'),
        routeMapNum?: int32(name='RouteMapNum', description='The ID of the policy.

A smaller sequence number indicates a lower priority. When a route is matched, a policy with a higher priority is preferentially matched.

**Valid values: 1001 to 2000**', example='1001'),
        status?: string(name='Status', description='Status The status of the instance. Valid values:

*   **Available**
*   **Not Available**: Unavailable
*   **Executing**: Executing
*   **Deleting**: The node is being deleted.', example='Available'),
        tenantId?: string(name='TenantId', description='The ID of the tenant.', example='1655449505171'),
        transmissionInstanceId?: string(name='TransmissionInstanceId', description='Release Instance ID', example='vpd-8rgvqazb'),
        transmissionInstanceName?: string(name='TransmissionInstanceName', description='Release Instance Name', example='vpd-transmit'),
        transmissionInstanceOwner?: string(name='TransmissionInstanceOwner', description='The tenant to which the published instance belongs', example='1620939556166277'),
        transmissionInstanceType?: string(name='TransmissionInstanceType', description='The type of the published instance. Possible values:

*   **VPD**: Lingjun network segment.
*   **VCC**: Lingjun Connection.', example='VPD'),
      }
    ](name='Data', description='routing policy information list'),
    total?: long(name='Total', description='The total number of entries returned.', example='0'),
  }(name='Content', description='The response parameters.'),
  message?: string(name='Message', description='The error message. (If the instance is in the Exception state, the exception cause is prompted.)', example='success'),
  requestId?: string(name='RequestId', description='The request ID.', example='0901F411-28FA-5B9C-BAEE-7776463FF0DC'),
}

model ListErRouteMapsResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: ListErRouteMapsResponseBody(name='body'),
}

/**
 * @summary Routing policies are queried.
 *
 * @param request ListErRouteMapsRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return ListErRouteMapsResponse
 */
async function listErRouteMapsWithOptions(request: ListErRouteMapsRequest, runtime: Util.RuntimeOptions): ListErRouteMapsResponse {
  Util.validateModel(request);
  var body : map[string]any = {};
  if (!Util.isUnset(request.destinationCidrBlock)) {
    body['DestinationCidrBlock'] = request.destinationCidrBlock;
  }
  if (!Util.isUnset(request.enablePage)) {
    body['EnablePage'] = request.enablePage;
  }
  if (!Util.isUnset(request.erId)) {
    body['ErId'] = request.erId;
  }
  if (!Util.isUnset(request.erRouteMapId)) {
    body['ErRouteMapId'] = request.erRouteMapId;
  }
  if (!Util.isUnset(request.erRouteMapNum)) {
    body['ErRouteMapNum'] = request.erRouteMapNum;
  }
  if (!Util.isUnset(request.pageNumber)) {
    body['PageNumber'] = request.pageNumber;
  }
  if (!Util.isUnset(request.pageSize)) {
    body['PageSize'] = request.pageSize;
  }
  if (!Util.isUnset(request.receptionInstanceId)) {
    body['ReceptionInstanceId'] = request.receptionInstanceId;
  }
  if (!Util.isUnset(request.receptionInstanceName)) {
    body['ReceptionInstanceName'] = request.receptionInstanceName;
  }
  if (!Util.isUnset(request.receptionInstanceType)) {
    body['ReceptionInstanceType'] = request.receptionInstanceType;
  }
  if (!Util.isUnset(request.regionId)) {
    body['RegionId'] = request.regionId;
  }
  if (!Util.isUnset(request.resourceGroupId)) {
    body['ResourceGroupId'] = request.resourceGroupId;
  }
  if (!Util.isUnset(request.routeMapAction)) {
    body['RouteMapAction'] = request.routeMapAction;
  }
  if (!Util.isUnset(request.transmissionInstanceId)) {
    body['TransmissionInstanceId'] = request.transmissionInstanceId;
  }
  if (!Util.isUnset(request.transmissionInstanceName)) {
    body['TransmissionInstanceName'] = request.transmissionInstanceName;
  }
  if (!Util.isUnset(request.transmissionInstanceType)) {
    body['TransmissionInstanceType'] = request.transmissionInstanceType;
  }
  var req = new OpenApi.OpenApiRequest{ 
    body = OpenApiUtil.parseToMap(body),
  };
  var params = new OpenApi.Params{
    action = 'ListErRouteMaps',
    version = '2022-05-30',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'POST',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Routing policies are queried.
 *
 * @param request ListErRouteMapsRequest
 * @return ListErRouteMapsResponse
 */
async function listErRouteMaps(request: ListErRouteMapsRequest): ListErRouteMapsResponse {
  var runtime = new Util.RuntimeOptions{};
  return listErRouteMapsWithOptions(request, runtime);
}

model ListErsRequest {
  enablePage?: boolean(name='EnablePage', description='Specifies whether to enable paged query. Valid values:

*   true: enables paged query.
*   false: Paged query is disabled.', example='false'),
  erId?: string(name='ErId', description='The ID of the Lingjun HUB instance.', example='er-kkopgtne'),
  erName?: string(name='ErName', description='Lingjun HUB name.', example='er-heyuan-main'),
  instanceId?: string(name='InstanceId', description='The ID of the network instance.', example='vcc-cn-209300qha01'),
  instanceType?: string(name='InstanceType', description='The type of the attached network instance. Valid values:

*   **VPD**
*   **VCC**', example='VCC'),
  masterZoneId?: string(name='MasterZoneId', description='The primary zone.', example='cn-wulanchabu-b'),
  pageNumber?: int32(name='PageNumber', description='The page number to return. Pages start from page 1. Default value: 1.', example='1'),
  pageSize?: int32(name='PageSize', description='The number of entries to return on each page. Default value: 10.', example='10'),
  regionId?: string(name='RegionId', description='The region ID.

This parameter is required.', example='cn-wulanchabu'),
  resourceGroupId?: string(name='ResourceGroupId', description='Resource group instance ID', example='rg-acfmwfm33rlt6zi'),
}

model ListErsResponseBody = {
  accessDeniedDetail?: string(name='AccessDeniedDetail', description='The details about the access denial.', example='None'),
  code?: int32(name='Code', description='The response status code.', example='0'),
  content?: {
    data?: [ 
      {
        connections?: long(name='Connections', description='The number of connections to the Lingjun HUB network instance.', example='2'),
        createTime?: string(name='CreateTime', description='The time when the activation code was created.', example='1640930671000'),
        description?: string(name='Description', description='The description of the synchronization task.', example='No description'),
        erId?: string(name='ErId', description='The ID of the Lingjun HUB instance.', example='er-kkopgtne'),
        erName?: string(name='ErName', description='The name of the Lingjun HUB instance.', example='er-wulanchabu-main'),
        gmtModified?: string(name='GmtModified', description='The time when the O\\\\&M task was modified.', example='1640930671000'),
        masterZoneId?: string(name='MasterZoneId', description='The primary zone.', example='cn-wulanchabu-b'),
        message?: string(name='Message', description='The returned message.', example='test'),
        regionId?: string(name='RegionId', description='The region ID.', example='cn-wulanchabu'),
        resourceGroupId?: string(name='ResourceGroupId', description='Resource group instance ID', example='rg-acfmv2m2w43japa'),
        routeMaps?: long(name='RouteMaps', description='Number of Lingjun HUB routing policy.', example='2'),
        status?: string(name='Status', description='The task status.', example='Available'),
        tenantId?: string(name='TenantId', description='The tenant ID.', example='1655449505171'),
      }
    ](name='Data', description='lingjun hub information list.'),
    total?: long(name='Total', description='The total number of entries.', example='1'),
  }(name='Content', description='The response data.'),
  message?: string(name='Message', description='The error message. (If the instance is in the Exception state, the exception cause is displayed.)', example='success'),
  requestId?: string(name='RequestId', description='The request ID.', example='AC8C713A-A9F4-5984-A5E1-76496DF35153'),
}

model ListErsResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: ListErsResponseBody(name='body'),
}

/**
 * @summary Queries the Lingjun HUB.
 *
 * @param request ListErsRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return ListErsResponse
 */
async function listErsWithOptions(request: ListErsRequest, runtime: Util.RuntimeOptions): ListErsResponse {
  Util.validateModel(request);
  var body : map[string]any = {};
  if (!Util.isUnset(request.enablePage)) {
    body['EnablePage'] = request.enablePage;
  }
  if (!Util.isUnset(request.erId)) {
    body['ErId'] = request.erId;
  }
  if (!Util.isUnset(request.erName)) {
    body['ErName'] = request.erName;
  }
  if (!Util.isUnset(request.instanceId)) {
    body['InstanceId'] = request.instanceId;
  }
  if (!Util.isUnset(request.instanceType)) {
    body['InstanceType'] = request.instanceType;
  }
  if (!Util.isUnset(request.masterZoneId)) {
    body['MasterZoneId'] = request.masterZoneId;
  }
  if (!Util.isUnset(request.pageNumber)) {
    body['PageNumber'] = request.pageNumber;
  }
  if (!Util.isUnset(request.pageSize)) {
    body['PageSize'] = request.pageSize;
  }
  if (!Util.isUnset(request.regionId)) {
    body['RegionId'] = request.regionId;
  }
  if (!Util.isUnset(request.resourceGroupId)) {
    body['ResourceGroupId'] = request.resourceGroupId;
  }
  var req = new OpenApi.OpenApiRequest{ 
    body = OpenApiUtil.parseToMap(body),
  };
  var params = new OpenApi.Params{
    action = 'ListErs',
    version = '2022-05-30',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'POST',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Queries the Lingjun HUB.
 *
 * @param request ListErsRequest
 * @return ListErsResponse
 */
async function listErs(request: ListErsRequest): ListErsResponse {
  var runtime = new Util.RuntimeOptions{};
  return listErsWithOptions(request, runtime);
}

model ListInstancesByNcdRequest {
  instanceId?: string(name='InstanceId', description='The instance ID.

This parameter is required.', example='lni-1234****'),
  instanceType?: string(name='InstanceType', description='The parameter that specifies the instance type.

Valid value:

*   node: Lingjun node.
*   lni: lingjun network interface controller.

This parameter is required.', example='lni'),
  maxNcd?: int32(name='MaxNcd', description='Maximum network communication distance

This parameter is required.', example='2'),
  regionId?: string(name='RegionId', description='The region ID.

This parameter is required.', example='cn-wulanchabu'),
}

model ListInstancesByNcdResponseBody = {
  accessDeniedDetail?: string(name='AccessDeniedDetail', description='The details about the access denial.', example='None'),
  code?: int32(name='Code', description='The response status code.', example='0'),
  content?: {
    instanceInfos?: [ 
      {
        instanceId?: string(name='InstanceId', description='The instance ID.', example='lni-1235****'),
        ncd?: int32(name='Ncd', description='network communication distance', example='2'),
      }
    ](name='InstanceInfos', description='A collection of instances whose network communication distance from the source instance ID does not exceed maxNcd'),
    instanceType?: string(name='InstanceType', description='Instance Type

Valid value:

*   node: Lingjun node.
*   lni: lingjun network interface controller.', example='lni'),
    maxNcd?: int32(name='MaxNcd', description='Maximum communication distance between nodes', example='3'),
    sourceInstanceId?: string(name='SourceInstanceId', description='The ID of the source instance.', example='lni-1234****'),
  }(name='Content', description='The response parameters.'),
  message?: string(name='Message', description='The returned message.', example='You don\\\\"t have the permission of this operation, action=eflo:ListInstancesByNcd, arn=acs:eflo:cn-heyuan:1263399219805497:networkinterface/*, resourceGroup=null'),
  requestId?: string(name='RequestId', description='Request ID of the current request', example='AC8C713A-A9F4-5984-A5E1-76496DF35153'),
}

model ListInstancesByNcdResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: ListInstancesByNcdResponseBody(name='body'),
}

/**
 * @summary Queries the GPU node list of a specified GPU node whose communication distance does not exceed the specified NCD.
 *
 * @param request ListInstancesByNcdRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return ListInstancesByNcdResponse
 */
async function listInstancesByNcdWithOptions(request: ListInstancesByNcdRequest, runtime: Util.RuntimeOptions): ListInstancesByNcdResponse {
  Util.validateModel(request);
  var body : map[string]any = {};
  if (!Util.isUnset(request.instanceId)) {
    body['InstanceId'] = request.instanceId;
  }
  if (!Util.isUnset(request.instanceType)) {
    body['InstanceType'] = request.instanceType;
  }
  if (!Util.isUnset(request.maxNcd)) {
    body['MaxNcd'] = request.maxNcd;
  }
  if (!Util.isUnset(request.regionId)) {
    body['RegionId'] = request.regionId;
  }
  var req = new OpenApi.OpenApiRequest{ 
    body = OpenApiUtil.parseToMap(body),
  };
  var params = new OpenApi.Params{
    action = 'ListInstancesByNcd',
    version = '2022-05-30',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'POST',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Queries the GPU node list of a specified GPU node whose communication distance does not exceed the specified NCD.
 *
 * @param request ListInstancesByNcdRequest
 * @return ListInstancesByNcdResponse
 */
async function listInstancesByNcd(request: ListInstancesByNcdRequest): ListInstancesByNcdResponse {
  var runtime = new Util.RuntimeOptions{};
  return listInstancesByNcdWithOptions(request, runtime);
}

model ListLeniPrivateIpAddressesRequest {
  elasticNetworkInterfaceId?: string(name='ElasticNetworkInterfaceId', description='Lingjun Elastic Network Interface ID.', example='leni-1234****'),
  ipName?: string(name='IpName', description='Lingjun Elastic Network Interface secondary private IP unique identifier.', example='sip-8ylg****'),
  pageNumber?: int32(name='PageNumber', description='The page number returned.', example='1'),
  pageSize?: int32(name='PageSize', description='The number of entries to return on each page.', example='20'),
  privateIpAddress?: string(name='PrivateIpAddress', description='Lingjun Elastic Network Interface secondary private IP.', example='10.0.****'),
  regionId?: string(name='RegionId', description='The region ID.

This parameter is required.', example='cn-wulanchabu'),
  resourceGroupId?: string(name='ResourceGroupId'),
  status?: string(name='Status', description='The status of the image build command risk.', example='Available'),
}

model ListLeniPrivateIpAddressesResponseBody = {
  accessDeniedDetail?: string(name='AccessDeniedDetail', description='The details about the access denial.', example='None'),
  code?: int32(name='Code', description='The response status code.', example='0'),
  content?: {
    data?: [ 
      {
        description?: string(name='Description', description='The description.', example='test_vpn1_pbr_route_54'),
        elasticNetworkInterfaceId?: string(name='ElasticNetworkInterfaceId', description='Lingjun Elastic Network Interface ID.', example='leni-1234****'),
        gmtCreate?: string(name='GmtCreate', description='The time when the activation code was created.', example='1675929918000'),
        gmtModified?: string(name='GmtModified', description='The time when the certificate was updated.', example='1675929918000'),
        ipName?: string(name='IpName', description='Lingjun Elastic Network Interface secondary private IP unique identifier.', example='sip-8ylg****'),
        message?: string(name='Message', description='The response message.', example='success'),
        privateIpAddress?: string(name='PrivateIpAddress', description='Lingjun Elastic Network Interface secondary private IP address.', example='10.0.****'),
        regionId?: string(name='RegionId', description='The region ID.', example='cn-wulanchabu'),
        status?: string(name='Status', description='The task status.', example='Available'),
      }
    ](name='Data', description='The response parameters.'),
    resourceGroupId?: string(name='ResourceGroupId'),
    total?: long(name='Total', description='The total number of entries.', example='1'),
  }(name='Content', description='The response data.'),
  message?: string(name='Message', description='The returned message.', example='success'),
  requestId?: string(name='RequestId', description='The ID of the request.', example='AC8C713A-A9F4-5984-A5E1-76496DF35153'),
}

model ListLeniPrivateIpAddressesResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: ListLeniPrivateIpAddressesResponseBody(name='body'),
}

/**
 * @summary Queries the list of secondary private IP addresses of Lingjun Elastic Network Interface.
 *
 * @param request ListLeniPrivateIpAddressesRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return ListLeniPrivateIpAddressesResponse
 */
async function listLeniPrivateIpAddressesWithOptions(request: ListLeniPrivateIpAddressesRequest, runtime: Util.RuntimeOptions): ListLeniPrivateIpAddressesResponse {
  Util.validateModel(request);
  var body : map[string]any = {};
  if (!Util.isUnset(request.elasticNetworkInterfaceId)) {
    body['ElasticNetworkInterfaceId'] = request.elasticNetworkInterfaceId;
  }
  if (!Util.isUnset(request.ipName)) {
    body['IpName'] = request.ipName;
  }
  if (!Util.isUnset(request.pageNumber)) {
    body['PageNumber'] = request.pageNumber;
  }
  if (!Util.isUnset(request.pageSize)) {
    body['PageSize'] = request.pageSize;
  }
  if (!Util.isUnset(request.privateIpAddress)) {
    body['PrivateIpAddress'] = request.privateIpAddress;
  }
  if (!Util.isUnset(request.regionId)) {
    body['RegionId'] = request.regionId;
  }
  if (!Util.isUnset(request.resourceGroupId)) {
    body['ResourceGroupId'] = request.resourceGroupId;
  }
  if (!Util.isUnset(request.status)) {
    body['Status'] = request.status;
  }
  var req = new OpenApi.OpenApiRequest{ 
    body = OpenApiUtil.parseToMap(body),
  };
  var params = new OpenApi.Params{
    action = 'ListLeniPrivateIpAddresses',
    version = '2022-05-30',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'POST',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Queries the list of secondary private IP addresses of Lingjun Elastic Network Interface.
 *
 * @param request ListLeniPrivateIpAddressesRequest
 * @return ListLeniPrivateIpAddressesResponse
 */
async function listLeniPrivateIpAddresses(request: ListLeniPrivateIpAddressesRequest): ListLeniPrivateIpAddressesResponse {
  var runtime = new Util.RuntimeOptions{};
  return listLeniPrivateIpAddressesWithOptions(request, runtime);
}

model ListLniPrivateIpAddressRequest {
  description?: string(name='Description', description='The description of the variable.', example='test'),
  enablePage?: boolean(name='EnablePage', description='Whether pagination is required', example='false'),
  ip?: string(name='Ip', description='network interface controller IP address', example='10.0.98.10'),
  ipName?: string(name='IpName', description='IP unique identifier', example='sip-tynhdh2s'),
  networkInterfaceId?: string(name='NetworkInterfaceId', description='Lingjun network interface controller ID', example='lni-2ze4uww7n6hsfzrwq77y'),
  pageNumber?: int32(name='PageNumber', description='The page number of the returned page.', example='1'),
  pageSize?: int32(name='PageSize', description='Obtain the index number of the current mouse click for an animation', example='20'),
  regionId?: string(name='RegionId', description='The region ID.

This parameter is required.', example='cn-wulanchabu'),
  resourceGroupId?: string(name='ResourceGroupId'),
}

model ListLniPrivateIpAddressResponseBody = {
  accessDeniedDetail?: string(name='AccessDeniedDetail', description='The details about the access denial.', example='None'),
  code?: int32(name='Code', description='The response status code.', example='0'),
  content?: {
    data?: [ 
      {
        description?: string(name='Description', description='The instance description.', example='test'),
        gmtCreate?: string(name='GmtCreate', description='The time when the data address was created.', example='1651734291000'),
        ipAddressMac?: string(name='IpAddressMac', description='MAC address of the secondary private network', example='00-ff-84-15-ba-67'),
        ipName?: string(name='IpName', description='IP unique identifier', example='sip-1hq1ql7vz'),
        message?: string(name='Message', description='The error message. (If the instance is in the Exception state, the exception cause is prompted.)', example='success'),
        networkInterfaceId?: string(name='NetworkInterfaceId', description='Lingjun network interface controller ID', example='lni-bp11hq1ql7vza3k4xz7q'),
        privateIpAddress?: string(name='PrivateIpAddress', description='Secondary private IP address of Lingjun network interface controller', example='10.42.5.92'),
        regionId?: string(name='RegionId', description='The region ID.', example='cn-wulanchabu'),
        status?: string(name='Status', description='The status of the intervention entry. Valid value:', example='Available'),
      }
    ](name='Data', description='The returned result.'),
    resourceGroupId?: string(name='ResourceGroupId'),
    total?: long(name='Total', description='The total number of entries returned.', example='0'),
  }(name='Content', description='The response parameters.'),
  message?: string(name='Message', description='The error message. (If the instance is in the Exception state, the exception cause is prompted.)', example='You don\\\\"t have the permission to do this operation.'),
  requestId?: string(name='RequestId', description='The request ID.', example='A88DFED5-24B7-5A3E-87DE-380BF06F3C90'),
}

model ListLniPrivateIpAddressResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: ListLniPrivateIpAddressResponseBody(name='body'),
}

/**
 * @summary Queries the list of secondary private IP addresses of Lingjun network interface controller.
 *
 * @param request ListLniPrivateIpAddressRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return ListLniPrivateIpAddressResponse
 */
async function listLniPrivateIpAddressWithOptions(request: ListLniPrivateIpAddressRequest, runtime: Util.RuntimeOptions): ListLniPrivateIpAddressResponse {
  Util.validateModel(request);
  var body : map[string]any = {};
  if (!Util.isUnset(request.description)) {
    body['Description'] = request.description;
  }
  if (!Util.isUnset(request.enablePage)) {
    body['EnablePage'] = request.enablePage;
  }
  if (!Util.isUnset(request.ip)) {
    body['Ip'] = request.ip;
  }
  if (!Util.isUnset(request.ipName)) {
    body['IpName'] = request.ipName;
  }
  if (!Util.isUnset(request.networkInterfaceId)) {
    body['NetworkInterfaceId'] = request.networkInterfaceId;
  }
  if (!Util.isUnset(request.pageNumber)) {
    body['PageNumber'] = request.pageNumber;
  }
  if (!Util.isUnset(request.pageSize)) {
    body['PageSize'] = request.pageSize;
  }
  if (!Util.isUnset(request.regionId)) {
    body['RegionId'] = request.regionId;
  }
  if (!Util.isUnset(request.resourceGroupId)) {
    body['ResourceGroupId'] = request.resourceGroupId;
  }
  var req = new OpenApi.OpenApiRequest{ 
    body = OpenApiUtil.parseToMap(body),
  };
  var params = new OpenApi.Params{
    action = 'ListLniPrivateIpAddress',
    version = '2022-05-30',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'POST',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Queries the list of secondary private IP addresses of Lingjun network interface controller.
 *
 * @param request ListLniPrivateIpAddressRequest
 * @return ListLniPrivateIpAddressResponse
 */
async function listLniPrivateIpAddress(request: ListLniPrivateIpAddressRequest): ListLniPrivateIpAddressResponse {
  var runtime = new Util.RuntimeOptions{};
  return listLniPrivateIpAddressWithOptions(request, runtime);
}

model ListNetworkInterfacesRequest {
  enablePage?: boolean(name='EnablePage', description='Specifies whether pagination is required.', example='false'),
  ip?: string(name='Ip', description='network interface controller the IP address.', example='203.107.46.227'),
  networkInterfaceId?: string(name='NetworkInterfaceId', description='Lingjun network interface controller ID.', example='lni-bp18exxqa2rvfn45e5pz'),
  nodeId?: string(name='NodeId', description='The ID of the machine to which the instance belongs.', example='r-2ze121o4uhr4np3r5t-db-5'),
  pageNumber?: int32(name='PageNumber', description='The number of the page to return.', example='1'),
  pageSize?: int32(name='PageSize', description='The current number of pages.', example='10'),
  regionId?: string(name='RegionId', description='The region ID.

This parameter is required.', example='cn-wulanchabu'),
  resourceGroupId?: string(name='ResourceGroupId'),
  subnetId?: string(name='SubnetId', description='The ID of the instance to which the Lingjun subnet belongs.', example='subnet-anhtskts'),
  vpdId?: string(name='VpdId', description='The ID of the VPD.', example='vpd-iv2zm1qf'),
}

model ListNetworkInterfacesResponseBody = {
  accessDeniedDetail?: string(name='AccessDeniedDetail', description='The details about the access denial.', example='None'),
  code?: int32(name='Code', description='The response status code.', example='0'),
  content?: {
    data?: [ 
      {
        createTime?: string(name='CreateTime', description='The time when the activation code was created.', example='1669734207000'),
        ethernet?: [ string ](name='Ethernet', description='The port number of the AD server.'),
        gateway?: string(name='Gateway', description='The gateway.', example='10.0.0.253'),
        ip?: string(name='Ip', description='The IP address of the instance.', example='10.0.0.13'),
        ncType?: string(name='NcType', description='The NC type.

Valid value:

*   CUSTOM_LNI_INTEGRATION: two-network one-in-one architecture Lingjun hosting network interface controller.
*   CPU: CPU machine.
*   ELASTIC_6.2: Machine
*   GPU: GPU machine.
*   DEFAULT: the old CPU machine.
*   CUSTOM_LNI: two network separation architecture Lingjun hosting network interface controller.', example='GPU'),
        networkInterfaceId?: string(name='NetworkInterfaceId', description='Lingjun network interface controller ID.', example='lni-2ze50voovmtswn328ogm'),
        networkInterfaceName?: string(name='NetworkInterfaceName', description='The port name.', example='bond0'),
        nodeId?: string(name='NodeId', description='The ID of the machine to which the instance belongs.', example='2d53f5c204e7476dae69177e7fa6f19c'),
        privateIpAddressMacGroup?: [ 
          {
            description?: string(name='Description', description='The instance description.', example='test'),
            ipAddressMac?: string(name='IpAddressMac', description='Secondary private MAC address.', example='00:25:9d:00:20:20'),
            ipName?: string(name='IpName', description='The unique IP identifier.', example='sip-1asjd3xg'),
            message?: string(name='Message', description='The error message. (If the instance is in the Exception state, the exception cause is prompted.)', example='success'),
            privateIpAddress?: string(name='PrivateIpAddress', description='The secondary private IP address.', example='10.0.0.14'),
            status?: string(name='Status', description='The status of the cache reserve instance.', example='Available'),
          }
        ](name='PrivateIpAddressMacGroup', description='Secondary Private IP\\\\&MAC Address Collection'),
        quota?: int32(name='Quota', description='network interface controller private secondary IP quota.', example='6'),
        regionId?: string(name='RegionId', description='The region ID.', example='cn-wulanchabu'),
        resourceGroupId?: string(name='ResourceGroupId'),
        serviceMac?: string(name='ServiceMac', description='The address of the service network interface controller.', example='00-ff-84-15-ba-67'),
        status?: string(name='Status', description='The task status.', example='Available'),
        subnetBaseInfo?: {
          cidr?: string(name='Cidr', description='The network segment of the Subnet.

*   The network segment of the subnet must be a proper subset of the network segment of Lingjun to which it belongs, and the mask must be between 16 bits and 29 bits, which can provide 8 to 65536 addresses. For example, the CIDR block of the Lingjun CIDR block is 192.168.0.0/16, and the CIDR blocks of the subnets under the Lingjun CIDR block are 192.168.0.0/17 to 192.168.0.0/29.
*   The first and last three IP addresses of each subnet segment are reserved by the system. For example, the CIDR blocks of the subnet are 192.168.1.0/24,192.168.1.0, 192.168.1.253, 192.168.1.254, and 192.168.1.255.

For more information about CIDR blocks, see the [What is CIDR?](https://www.alibabacloud.com/help/doc-detail/40637.htm#title-gu4-uzk-12r) section in the "Network FAQ" topic.

This parameter is left empty by default.', example='10.0.0.0/24'),
          createTime?: string(name='CreateTime', description='The time when the activation code was created.', example='1623656472000'),
          subnetId?: string(name='SubnetId', description='The ID of the Subnet instance.', example='subnet-yjnqn5ef'),
          subnetName?: string(name='SubnetName', description='The name of the Subnet instance.', example='subnet-1'),
        }(name='SubnetBaseInfo', description='Lingjun subnet (Subnet) basic information.'),
        tenantId?: string(name='TenantId', description='The tenant ID.', example='1620939556166279'),
        vpdBaseInfo?: {
          cidr?: string(name='Cidr', description='The network segment of Lingjun network segment (VPD).

*   We recommend that you use an RFC private endpoint as the Lingjun CIDR block, such as 10.0.0.0/8,172.16.0.0/12,192.168.0.0/16. In scenarios where the Doringjun CIDR block is connected to each other or where the Lingjun CIDR block is connected to a VPC, make sure that the addresses do not conflict with each other.
*   You can also use a custom CIDR block other than 100.64.0.0/10, 224.0.0.0/4, 127.0.0.0/8, or 169.254.0.0/16 and their subnets as the primary IPv4 CIDR block of the VPD. This parameter is left empty by default.', example='10.0.0.0/16'),
          createTime?: string(name='CreateTime', description='The time when the activation code was created.', example='1668158213000'),
          vpdId?: string(name='VpdId', description='The ID of the VPD instance.', example='vpd-d3isyds4'),
          vpdName?: string(name='VpdName', description='The name of the VPD instance.', example='vpd-1'),
        }(name='VpdBaseInfo', description='Lingjun network segment (VPD) basic information.'),
        zoneId?: string(name='ZoneId', description='The zone ID.', example='cn-wulanchabu-b'),
      }
    ](name='Data', description='The response parameters.'),
    total?: long(name='Total', description='The total number of entries that are returned.', example='0'),
  }(name='Content', description='The response data.'),
  message?: string(name='Message', description='The error message. (If the instance is in the Exception state, the exception cause is prompted.)', example='success'),
  requestId?: string(name='RequestId', description='The request ID.', example='039C3C3A-3C37-5672-80D5-D8CD48C676D1'),
}

model ListNetworkInterfacesResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: ListNetworkInterfacesResponseBody(name='body'),
}

/**
 * @summary Queries Lingjun network interfaces (LNIs).
 *
 * @param request ListNetworkInterfacesRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return ListNetworkInterfacesResponse
 */
async function listNetworkInterfacesWithOptions(request: ListNetworkInterfacesRequest, runtime: Util.RuntimeOptions): ListNetworkInterfacesResponse {
  Util.validateModel(request);
  var body : map[string]any = {};
  if (!Util.isUnset(request.enablePage)) {
    body['EnablePage'] = request.enablePage;
  }
  if (!Util.isUnset(request.ip)) {
    body['Ip'] = request.ip;
  }
  if (!Util.isUnset(request.networkInterfaceId)) {
    body['NetworkInterfaceId'] = request.networkInterfaceId;
  }
  if (!Util.isUnset(request.nodeId)) {
    body['NodeId'] = request.nodeId;
  }
  if (!Util.isUnset(request.pageNumber)) {
    body['PageNumber'] = request.pageNumber;
  }
  if (!Util.isUnset(request.pageSize)) {
    body['PageSize'] = request.pageSize;
  }
  if (!Util.isUnset(request.regionId)) {
    body['RegionId'] = request.regionId;
  }
  if (!Util.isUnset(request.resourceGroupId)) {
    body['ResourceGroupId'] = request.resourceGroupId;
  }
  if (!Util.isUnset(request.subnetId)) {
    body['SubnetId'] = request.subnetId;
  }
  if (!Util.isUnset(request.vpdId)) {
    body['VpdId'] = request.vpdId;
  }
  var req = new OpenApi.OpenApiRequest{ 
    body = OpenApiUtil.parseToMap(body),
  };
  var params = new OpenApi.Params{
    action = 'ListNetworkInterfaces',
    version = '2022-05-30',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'POST',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Queries Lingjun network interfaces (LNIs).
 *
 * @param request ListNetworkInterfacesRequest
 * @return ListNetworkInterfacesResponse
 */
async function listNetworkInterfaces(request: ListNetworkInterfacesRequest): ListNetworkInterfacesResponse {
  var runtime = new Util.RuntimeOptions{};
  return listNetworkInterfacesWithOptions(request, runtime);
}

model ListNodeInfosForPodRequest {
  clusterId?: string(name='ClusterId', description='The cluster ID.', example='cluster-***'),
  nodeId?: string(name='NodeId', description='The ID of the node for this operation.', example='node-be70****'),
  regionId?: string(name='RegionId', description='The region ID.

This parameter is required.', example='cn-wulanchabu'),
  zoneId?: string(name='ZoneId', description='The zone ID.', example='cn-wulanchabu-b'),
}

model ListNodeInfosForPodResponseBody = {
  accessDeniedDetail?: string(name='AccessDeniedDetail', description='The information about the request denial.', example='None'),
  code?: int32(name='Code', description='The response status code.', example='0'),
  content?: [ 
    {
      clusterId?: string(name='ClusterId', description='The cluster ID.', example='cluster-****'),
      hdeniQuota?: int32(name='HdeniQuota', description='Lingjun Gaomi network interface controller quota', example='10'),
      leniQuota?: int32(name='LeniQuota', description='Lingjun Elastic Network Interface quota, excluding system type', example='10'),
      leniSipQuota?: int32(name='LeniSipQuota', description='Lingjun Elastic Network Interface Secondary Private IP Quota', example='10'),
      lniSipQuota?: int32(name='LniSipQuota', description='Lingjun network interface controller Secondary Private IP Quota', example='10'),
      nodeId?: string(name='NodeId', description='The ID of the node for this operation.', example='node-be70****'),
      regionId?: string(name='RegionId', description='The region ID.', example='cn-wulanchabu'),
      vSwitches?: [ string ](name='VSwitches', description='List of VSwitches to which IP addresses can be applied for this node'),
      vpcId?: string(name='VpcId', description='The ID of the Virtual Private Cloud to which the current node belongs.', example='vpc-j6ctp4n75306****'),
      zoneId?: string(name='ZoneId', description='The zone ID.', example='cn-wulanchabu-b'),
    }
  ](name='Content', description='Response body'),
  message?: string(name='Message', description='The returned message.', example='You don\\\\"t have the permission of this operation.'),
  requestId?: string(name='RequestId', description='Request ID of the current request', example='0901F411-28FA-5B9C-BAEE-7776463FF0DC'),
}

model ListNodeInfosForPodResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: ListNodeInfosForPodResponseBody(name='body'),
}

/**
 * @summary Queries node network information.
 *
 * @param request ListNodeInfosForPodRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return ListNodeInfosForPodResponse
 */
async function listNodeInfosForPodWithOptions(request: ListNodeInfosForPodRequest, runtime: Util.RuntimeOptions): ListNodeInfosForPodResponse {
  Util.validateModel(request);
  var body : map[string]any = {};
  if (!Util.isUnset(request.clusterId)) {
    body['ClusterId'] = request.clusterId;
  }
  if (!Util.isUnset(request.nodeId)) {
    body['NodeId'] = request.nodeId;
  }
  if (!Util.isUnset(request.regionId)) {
    body['RegionId'] = request.regionId;
  }
  if (!Util.isUnset(request.zoneId)) {
    body['ZoneId'] = request.zoneId;
  }
  var req = new OpenApi.OpenApiRequest{ 
    body = OpenApiUtil.parseToMap(body),
  };
  var params = new OpenApi.Params{
    action = 'ListNodeInfosForPod',
    version = '2022-05-30',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'POST',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Queries node network information.
 *
 * @param request ListNodeInfosForPodRequest
 * @return ListNodeInfosForPodResponse
 */
async function listNodeInfosForPod(request: ListNodeInfosForPodRequest): ListNodeInfosForPodResponse {
  var runtime = new Util.RuntimeOptions{};
  return listNodeInfosForPodWithOptions(request, runtime);
}

model ListSubnetsRequest {
  enablePage?: boolean(name='EnablePage', description='Specifies whether to query by page. Optional values:

*   **true**: Enable pagination query
*   **false**: Pagination query is disabled', example='false'),
  pageNumber?: int32(name='PageNumber', description='The number of the page to return. The value must be greater than 0. Default value: 1.', example='1'),
  pageSize?: int32(name='PageSize', description='The number of entries per page. Valid values: 1 to 100. Default value: 20.', example='20'),
  regionId?: string(name='RegionId', description='The region ID of the disk.

This parameter is required.', example='cn-wulanchabu'),
  resourceGroupId?: string(name='ResourceGroupId', description='The resource group ID.

For more information about resource groups, see [Resource groups](https://help.aliyun.com/document_detail/94475.htm?spm=a2c4g.11186623.0.0.29e15d7akXhpuu).', example='rg-aeky5f3qx6ceapq'),
  status?: string(name='Status', description='The status of the CLB instance. Valid values:

*   **Available**: Normal
*   **Not Available**: Unavailable
*   **Executing**: Executing
*   **Deleting**: The node is being deleted.', example='Available'),
  subnetId?: string(name='SubnetId', description='Lingjun subnet instance ID', example='subnet-anhtskts'),
  subnetName?: string(name='SubnetName', description='Lingjun subnet instance name', example='subnet-1'),
  tag?: [ 
    {
      key?: string(name='Key', description='The tag key of the VPN attachment.

You cannot specify an empty string as a tag key. It can be up to 64 characters in length and cannot start with aliyun or acs:. It cannot contain http:// or https://.

You can specify at most 20 tag keys in each call.', example='rg-subnet'),
      value?: string(name='Value', description='The tag value of the VPN connection.

The tag value can be empty or a string of up to 128 characters. It cannot start with aliyun or acs:, and cannot contain http:// or https://.

Each key-value pair must be unique. You can specify values for at most 20 tag keys in each call.', example='subnet-group-1'),
    }
  ](name='Tag', description='The tag information.

You can specify up to 20 tags.'),
  type?: string(name='Type', description='Lingjun Subnet Usage Type; optional; optional. Valid values:

*   **If you do not set this field for a common type**
*   **OOB** :OOB type
*   **LB**: LB type', example='Null'),
  vpdId?: string(name='VpdId', description='The ID of the Lingjun CIDR block.', example='vpd-fuliephf'),
  zoneId?: string(name='ZoneId', description='The zone ID of the disk.', example='cn-wulanchabu-a'),
}

model ListSubnetsResponseBody = {
  accessDeniedDetail?: string(name='AccessDeniedDetail', description='The details about the access denial.', example='None'),
  code?: int32(name='Code', description='The response status code.', example='0'),
  content?: {
    data?: [ 
      {
        cidr?: string(name='Cidr', description='The CIDR block of the Subnet.

*   The network segment of the subnet must be a proper subset of the network segment of Lingjun to which it belongs, and the mask must be between 16 bits and 29 bits, which can provide 8 to 65536 addresses. For example, the CIDR block of the Lingjun CIDR block is 192.168.0.0/16, and the CIDR blocks of the subnets under the Lingjun CIDR block are 192.168.0.0/17 to 192.168.0.0/29.
*   The first and last three IP addresses of each subnet segment are reserved by the system. For example, the CIDR blocks of the subnet are 192.168.1.0/24,192.168.1.0, 192.168.1.253, 192.168.1.254, and 192.168.1.255.', example='172.18.0.0/24'),
        createTime?: string(name='CreateTime', description='The time when the data address was created.', example='1678273219000'),
        gmtModified?: string(name='GmtModified', description='The time when the agent was last modified.', example='1678273219000'),
        message?: string(name='Message', description='The error message. (If the instance is in the Exception state, the exception cause is prompted.)', example='SUCCESS'),
        ncCount?: int32(name='NcCount', description='Number of NCs', example='16'),
        networkInterfaceCount?: int32(name='NetworkInterfaceCount', description='Number of Lingjun network interface controller', example='1'),
        regionId?: string(name='RegionId', description='The region ID.', example='cn-wulanchabu'),
        resourceGroupId?: string(name='ResourceGroupId', description='The ID of your Alibaba Cloud resource group.

For more information about resource groups, see [Resource groups](https://help.aliyun.com/document_detail/94475.htm?spm=a2c4g.11186623.0.0.29e15d7akXhpuu).', example='rg-aek2l4sq6l7unhi'),
        status?: string(name='Status', description='The status of the cache reserve instance. Valid values:

*   **Available**: Normal
*   **Not Available**: Unavailable
*   **Executing**: Executing
*   **Deleting**: The node is being deleted.', example='Available'),
        subnetId?: string(name='SubnetId', description='Lingjun subnet instance ID', example='subnet-c6wci55i'),
        subnetName?: string(name='SubnetName', description='Lingjun subnet instance name', example='yzp-rg-test3'),
        tags?: [ 
          {
            tagKey?: string(name='TagKey', description='The tag key.

You cannot specify an empty string as a tag key. It can be up to 64 characters in length and cannot start with aliyun or acs:. It cannot contain http:// or https://.

You can specify at most 20 tag keys in each call.', example='tag-subnet'),
            tagValue?: string(name='TagValue', description='The value of the tag that is added to the resource.

The tag value can be empty or a string of up to 128 characters. It cannot start with aliyun or acs:, and cannot contain http:// or https://.

Each key-value pair must be unique. You can specify values for at most 20 tag keys in each call.', example='subnet-group-1'),
          }
        ](name='Tags', description='The tag information.

You can specify up to 20 tags.'),
        tenantId?: string(name='TenantId', description='The ID of the tenant.', example='1655449505171'),
        type?: string(name='Type', description='Lingjun Subnet Usage Type; optional; optional. Valid values:

*   **If you do not set this field for a common type**
*   **OOB** :OOB type
*   **LB**: LB type', example='OOB'),
        vpdBaseInfo?: {
          cidr?: string(name='Cidr', description='The CIDR block of the VPD.

*   We recommend that you use an RFC private endpoint as the Lingjun CIDR block, such as 10.0.0.0/8,172.16.0.0/12,192.168.0.0/16. In scenarios where the Doringjun CIDR block is connected to each other or where the Lingjun CIDR block is connected to a VPC, make sure that the addresses do not conflict with each other.
*   You can also use a custom CIDR block other than 100.64.0.0/10, 224.0.0.0/4, 127.0.0.0/8, or 169.254.0.0/16 and their subnets as the primary IPv4 CIDR block of the VPD.', example='10.0.0.0/8'),
          createTime?: string(name='CreateTime', description='The time when the data address was created.', example='1678273219000'),
          vpdId?: string(name='VpdId', description='Lingjun CIDR block instance ID', example='vpd-d3isyds4'),
          vpdName?: string(name='VpdName', description='Lingjun CIDR block instance name', example='yzp-rg-test3'),
        }(name='VpdBaseInfo', description='vpd basic information'),
        vpdId?: string(name='VpdId', description='The ID of the Lingjun CIDR block.', example='vpd-ze3na0wf'),
        zoneId?: string(name='ZoneId', description='The zone ID.', example='cn-wulanchabu-b'),
      }
    ](name='Data', description='Lingjun subnet information list'),
    total?: long(name='Total', description='The total number of entries returned.', example='10'),
  }(name='Content', description='The response parameters.'),
  message?: string(name='Message', description='The returned message.', example='SUCCESS'),
  requestId?: string(name='RequestId', description='Request ID of the current request', example='7F9082CC-3D94-560F-A575-8E8EF6CE2CB8'),
}

model ListSubnetsResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: ListSubnetsResponseBody(name='body'),
}

/**
 * @summary You can call this operation to query the details of one or more Lingjun subnets, including the Lingjun subnet type, network address segment, and instance ID of the Lingjun CIDR block.
 *
 * @param request ListSubnetsRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return ListSubnetsResponse
 */
async function listSubnetsWithOptions(request: ListSubnetsRequest, runtime: Util.RuntimeOptions): ListSubnetsResponse {
  Util.validateModel(request);
  var body : map[string]any = {};
  if (!Util.isUnset(request.enablePage)) {
    body['EnablePage'] = request.enablePage;
  }
  if (!Util.isUnset(request.pageNumber)) {
    body['PageNumber'] = request.pageNumber;
  }
  if (!Util.isUnset(request.pageSize)) {
    body['PageSize'] = request.pageSize;
  }
  if (!Util.isUnset(request.regionId)) {
    body['RegionId'] = request.regionId;
  }
  if (!Util.isUnset(request.resourceGroupId)) {
    body['ResourceGroupId'] = request.resourceGroupId;
  }
  if (!Util.isUnset(request.status)) {
    body['Status'] = request.status;
  }
  if (!Util.isUnset(request.subnetId)) {
    body['SubnetId'] = request.subnetId;
  }
  if (!Util.isUnset(request.subnetName)) {
    body['SubnetName'] = request.subnetName;
  }
  if (!Util.isUnset(request.tag)) {
    body['Tag'] = request.tag;
  }
  if (!Util.isUnset(request.type)) {
    body['Type'] = request.type;
  }
  if (!Util.isUnset(request.vpdId)) {
    body['VpdId'] = request.vpdId;
  }
  if (!Util.isUnset(request.zoneId)) {
    body['ZoneId'] = request.zoneId;
  }
  var req = new OpenApi.OpenApiRequest{ 
    body = OpenApiUtil.parseToMap(body),
  };
  var params = new OpenApi.Params{
    action = 'ListSubnets',
    version = '2022-05-30',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'POST',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary You can call this operation to query the details of one or more Lingjun subnets, including the Lingjun subnet type, network address segment, and instance ID of the Lingjun CIDR block.
 *
 * @param request ListSubnetsRequest
 * @return ListSubnetsResponse
 */
async function listSubnets(request: ListSubnetsRequest): ListSubnetsResponse {
  var runtime = new Util.RuntimeOptions{};
  return listSubnetsWithOptions(request, runtime);
}

model ListVccFlowInfosRequest {
  direction?: string(name='Direction', description='Direction

Valid value:

*   IN: inbound.
*   OUT: the outbound.', example='OUT'),
  from?: long(name='From', description='The start time. The default value is 5 minutes ago.', example='1667727514000'),
  metricName?: string(name='MetricName', description='Metric

Valid value:

*   totalPacketsRate: Total Packet Rate.
*   dropBytesRate: the of the stream drop rate.
*   dropPacketsRate: Dropped Packet Rate.
*   totalBytesRate: the total streaming rate.
*   passBytesRate: by stream rate.
*   passPacketsRate: by packet rate.', example='passBytesRate'),
  regionId?: string(name='RegionId', description='The region ID.', example='cn-wulanchabu'),
  to?: long(name='To', description='The end time. The default time is the current time.', example='1689749749000'),
  vccId?: string(name='VccId', description='Lingjun Connection ID', example='vcc-cn-zvp2******'),
}

model ListVccFlowInfosResponseBody = {
  accessDeniedDetail?: string(name='AccessDeniedDetail', description='访问被拒绝的详细原因。', example='None'),
  code?: int32(name='Code', description='The response status code.', example='0'),
  content?: {
    data?: [ 
      {
        direction?: string(name='Direction', description='The direction.', example='OUT'),
        metricName?: string(name='MetricName', description='The metric. Valid values:', example='passBytesRate'),
        regionId?: string(name='RegionId', description='The region ID.', example='cn-wulanchabu'),
        timestamp?: long(name='Timestamp', description='Time', example='1689749749000'),
        value?: double(name='Value', description='Value', example='123'),
        vccId?: string(name='VccId', description='Lingjun Connection ID', example='vcc-cn-zvp2w******'),
      }
    ](name='Data', description='Lingjun Connection Traffic Information'),
    total?: long(name='Total', description='The total number of entries returned.', example='1'),
  }(name='Content', description='The returned data.'),
  message?: string(name='Message', description='Response', example='success'),
  requestId?: string(name='RequestId', description='Request ID of the current request', example='BDBCC783-84CA-5733-8EEA-************'),
}

model ListVccFlowInfosResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: ListVccFlowInfosResponseBody(name='body'),
}

/**
 * @summary Queries the traffic rate of a Lingjun connection.
 *
 * @param request ListVccFlowInfosRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return ListVccFlowInfosResponse
 */
async function listVccFlowInfosWithOptions(request: ListVccFlowInfosRequest, runtime: Util.RuntimeOptions): ListVccFlowInfosResponse {
  Util.validateModel(request);
  var body : map[string]any = {};
  if (!Util.isUnset(request.direction)) {
    body['Direction'] = request.direction;
  }
  if (!Util.isUnset(request.from)) {
    body['From'] = request.from;
  }
  if (!Util.isUnset(request.metricName)) {
    body['MetricName'] = request.metricName;
  }
  if (!Util.isUnset(request.regionId)) {
    body['RegionId'] = request.regionId;
  }
  if (!Util.isUnset(request.to)) {
    body['To'] = request.to;
  }
  if (!Util.isUnset(request.vccId)) {
    body['VccId'] = request.vccId;
  }
  var req = new OpenApi.OpenApiRequest{ 
    body = OpenApiUtil.parseToMap(body),
  };
  var params = new OpenApi.Params{
    action = 'ListVccFlowInfos',
    version = '2022-05-30',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'POST',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Queries the traffic rate of a Lingjun connection.
 *
 * @param request ListVccFlowInfosRequest
 * @return ListVccFlowInfosResponse
 */
async function listVccFlowInfos(request: ListVccFlowInfosRequest): ListVccFlowInfosResponse {
  var runtime = new Util.RuntimeOptions{};
  return listVccFlowInfosWithOptions(request, runtime);
}

model ListVccGrantRulesRequest {
  enablePage?: boolean(name='EnablePage', description='Specifies whether to enable paged query. Optional values:

*   **true**: Enable pagination query
*   **false**: Pagination query is disabled', example='false'),
  erId?: string(name='ErId', description='Lingjun HUB ID', example='er-kkopgtne'),
  forSelect?: boolean(name='ForSelect', description='Use the drop-down box', example='true'),
  grantRuleId?: string(name='GrantRuleId', description='Authorization Entry ID', example='grant-rule-jaj33d1b804'),
  grantTenantId?: string(name='GrantTenantId', description='Authorized Tenant ID', example='1620939556166277'),
  instanceId?: string(name='InstanceId', description='Network Instance ID', example='vcc-cn-jaj33d1b804'),
  instanceName?: string(name='InstanceName', description='Instance name', example='vcc-1'),
  pageNumber?: int32(name='PageNumber', description='The page number of the page to return. Pages start from page 1. Default value: 1.', example='1'),
  pageSize?: int32(name='PageSize', description='The number of entries to return on each page. Default value: 20.', example='20'),
  regionId?: string(name='RegionId', description='The region ID.

This parameter is required.', example='cn-wulanchabu'),
  resourceGroupId?: string(name='ResourceGroupId', description='Resource group instance ID', example='rg-aekzb3n5lgk2ieq'),
}

model ListVccGrantRulesResponseBody = {
  accessDeniedDetail?: string(name='AccessDeniedDetail', description='The details about the access denial.', example='None'),
  code?: int32(name='Code', description='The response status code.', example='0'),
  content?: {
    data?: [ 
      {
        createTime?: string(name='CreateTime', description='The time when the data address was created.', example='1678273219000'),
        erId?: string(name='ErId', description='Lingjun HUB ID', example='er-kkopgtne'),
        grantRuleId?: string(name='GrantRuleId', description='Cross-account authorization information Instance ID', example='grant-rule-jpumgwvp'),
        grantTenantId?: string(name='GrantTenantId', description='Authorized Tenant ID', example='1013666993027780'),
        instanceId?: string(name='InstanceId', description='Network Instance ID', example='vcc-cn-jaj33d1kb05'),
        instanceName?: string(name='InstanceName', description='The name of the ECU.', example='vcc-1'),
        product?: string(name='Product', description='The type of the authorized product. Valid values:

*   **VPD**: indicates a VPD instance of the Lingjun network segment.
*   **VCC**: indicates that Lingjun connects to the VCC instance.', example='VCC'),
        regionId?: string(name='RegionId', description='The region ID.', example='cn-wulanchabu'),
        resourceGroupId?: string(name='ResourceGroupId', description='Resource group instance ID', example='rg-aek2l4sq6l7unhi'),
        tenantId?: string(name='TenantId', description='The ID of the tenant.', example='1655449505171'),
        used?: boolean(name='Used', description='Whether the current cross-account resource has been bound to the cross-account Lingjun HUB. Valid values:

*   **true**: Used
*   **false**: Not used', example='true'),
      }
    ](name='Data', description='List of cross-account authorization information of Lingjun connection'),
    total?: long(name='Total', description='The total number of entries returned.', example='0'),
  }(name='Content', description='The response parameters.'),
  message?: string(name='Message', description='The returned message.', example='success'),
  requestId?: string(name='RequestId', description='Request ID of the current request', example='A56F7D3C-8850-5AF4-A342-2D71C9A9D1CC'),
}

model ListVccGrantRulesResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: ListVccGrantRulesResponseBody(name='body'),
}

/**
 * @summary Queries the details of a Lingjun connection authorization, including the authorized tenant ID, region, and Lingjun HUB instance information.
 *
 * @param request ListVccGrantRulesRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return ListVccGrantRulesResponse
 */
async function listVccGrantRulesWithOptions(request: ListVccGrantRulesRequest, runtime: Util.RuntimeOptions): ListVccGrantRulesResponse {
  Util.validateModel(request);
  var body : map[string]any = {};
  if (!Util.isUnset(request.enablePage)) {
    body['EnablePage'] = request.enablePage;
  }
  if (!Util.isUnset(request.erId)) {
    body['ErId'] = request.erId;
  }
  if (!Util.isUnset(request.forSelect)) {
    body['ForSelect'] = request.forSelect;
  }
  if (!Util.isUnset(request.grantRuleId)) {
    body['GrantRuleId'] = request.grantRuleId;
  }
  if (!Util.isUnset(request.grantTenantId)) {
    body['GrantTenantId'] = request.grantTenantId;
  }
  if (!Util.isUnset(request.instanceId)) {
    body['InstanceId'] = request.instanceId;
  }
  if (!Util.isUnset(request.instanceName)) {
    body['InstanceName'] = request.instanceName;
  }
  if (!Util.isUnset(request.pageNumber)) {
    body['PageNumber'] = request.pageNumber;
  }
  if (!Util.isUnset(request.pageSize)) {
    body['PageSize'] = request.pageSize;
  }
  if (!Util.isUnset(request.regionId)) {
    body['RegionId'] = request.regionId;
  }
  if (!Util.isUnset(request.resourceGroupId)) {
    body['ResourceGroupId'] = request.resourceGroupId;
  }
  var req = new OpenApi.OpenApiRequest{ 
    body = OpenApiUtil.parseToMap(body),
  };
  var params = new OpenApi.Params{
    action = 'ListVccGrantRules',
    version = '2022-05-30',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'POST',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Queries the details of a Lingjun connection authorization, including the authorized tenant ID, region, and Lingjun HUB instance information.
 *
 * @param request ListVccGrantRulesRequest
 * @return ListVccGrantRulesResponse
 */
async function listVccGrantRules(request: ListVccGrantRulesRequest): ListVccGrantRulesResponse {
  var runtime = new Util.RuntimeOptions{};
  return listVccGrantRulesWithOptions(request, runtime);
}

model ListVccRouteEntriesRequest {
  destinationCidrBlock?: string(name='DestinationCidrBlock', description='Destination CIDR block', example='0.0.0.0/0'),
  enablePage?: boolean(name='EnablePage', description='Specifies whether to enable pagination query.', example='false'),
  ignoreDetailedRouteEntry?: boolean(name='IgnoreDetailedRouteEntry', description='Filter 32 detailed CIDR blocks. Default value: true', example='true'),
  nextHopId?: string(name='NextHopId', description='Next Hop Instance', example='vcc-cn-jaj34d75h01'),
  nextHopType?: string(name='NextHopType', description='Next Hop Instance Type', example='VCC'),
  pageNumber?: int32(name='PageNumber', description='The page number of the page to return. Pages start from page 1. Default value: 1.', example='1'),
  pageSize?: int32(name='PageSize', description='The number of entries to return on each page. Default value: 20.', example='20'),
  regionId?: string(name='RegionId', description='The region ID.

This parameter is required.', example='cn-wulanchabu'),
  resourceGroupId?: string(name='ResourceGroupId', description='Resource group instance ID', example='rg-aek2l4sq6l7unhi'),
  routeType?: string(name='RouteType', description='Route type', example='BGP'),
  status?: string(name='Status', description='The status of the enterprise-level snapshot policy.', example='Available'),
  vccId?: string(name='VccId', description='The ID of the Lingjun connection instance.

This parameter is required.', example='vcc-cn-zvp2w222001'),
  vpdRouteEntryId?: string(name='VpdRouteEntryId', description='Lingjun CIDR block route entry instance ID', example='vpd-rte-toekyqel'),
}

model ListVccRouteEntriesResponseBody = {
  accessDeniedDetail?: string(name='AccessDeniedDetail', description='The details about the access denial.', example='None'),
  code?: int32(name='Code', description='The response status code.', example='0'),
  content?: {
    data?: [ 
      {
        destinationCidrBlock?: string(name='DestinationCidrBlock', description='Destination CIDR block', example='10.192.32.0/24'),
        gmtModified?: string(name='GmtModified', description='The time when the cluster was updated.', example='1642745758000'),
        message?: string(name='Message', description='The returned message.', example='success'),
        nextHopId?: string(name='NextHopId', description='Next Hop Instance', example='vcc-cn-zvp2w222001'),
        nextHopType?: string(name='NextHopType', description='Next Hop Type', example='VCC'),
        regionId?: string(name='RegionId', description='The region ID.', example='cn-wulanchabu'),
        resourceGroupId?: string(name='ResourceGroupId', description='Resource group instance ID', example='rg-aek2l4sq6l7unhi'),
        resourceTenantId?: string(name='ResourceTenantId', description='The ID of the tenant to which the resource belongs.', example='1655449505171'),
        routeType?: string(name='RouteType', description='Route type', example='BGP'),
        status?: string(name='Status', description='The status of the intervention entry. Valid value:', example='Available'),
        tenantId?: string(name='TenantId', description='The ID of the tenant.', example='1655449505171'),
        vccId?: string(name='VccId', description='The ID of the Lingjun connection instance.', example='vcc-cn-zvp2w222001'),
        vccRouteEntryId?: string(name='VccRouteEntryId', description='The ID of the route entry.', example='vcc-rte-maysfadg'),
      }
    ](name='Data', description='List of Lingjun Connection Route Entries'),
    total?: long(name='Total', description='The total number of entries returned.', example='0'),
  }(name='Content', description='The response parameters.'),
  message?: string(name='Message', description='response message, if the success request is', example='success'),
  requestId?: string(name='RequestId', description='Request ID of the current request', example='A88DFED5-24B7-5A3E-87DE-380BF06F3C90'),
}

model ListVccRouteEntriesResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: ListVccRouteEntriesResponseBody(name='body'),
}

/**
 * @summary Queries Lingjun connection route entries.
 *
 * @param request ListVccRouteEntriesRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return ListVccRouteEntriesResponse
 */
async function listVccRouteEntriesWithOptions(request: ListVccRouteEntriesRequest, runtime: Util.RuntimeOptions): ListVccRouteEntriesResponse {
  Util.validateModel(request);
  var body : map[string]any = {};
  if (!Util.isUnset(request.destinationCidrBlock)) {
    body['DestinationCidrBlock'] = request.destinationCidrBlock;
  }
  if (!Util.isUnset(request.enablePage)) {
    body['EnablePage'] = request.enablePage;
  }
  if (!Util.isUnset(request.ignoreDetailedRouteEntry)) {
    body['IgnoreDetailedRouteEntry'] = request.ignoreDetailedRouteEntry;
  }
  if (!Util.isUnset(request.nextHopId)) {
    body['NextHopId'] = request.nextHopId;
  }
  if (!Util.isUnset(request.nextHopType)) {
    body['NextHopType'] = request.nextHopType;
  }
  if (!Util.isUnset(request.pageNumber)) {
    body['PageNumber'] = request.pageNumber;
  }
  if (!Util.isUnset(request.pageSize)) {
    body['PageSize'] = request.pageSize;
  }
  if (!Util.isUnset(request.regionId)) {
    body['RegionId'] = request.regionId;
  }
  if (!Util.isUnset(request.resourceGroupId)) {
    body['ResourceGroupId'] = request.resourceGroupId;
  }
  if (!Util.isUnset(request.routeType)) {
    body['RouteType'] = request.routeType;
  }
  if (!Util.isUnset(request.status)) {
    body['Status'] = request.status;
  }
  if (!Util.isUnset(request.vccId)) {
    body['VccId'] = request.vccId;
  }
  if (!Util.isUnset(request.vpdRouteEntryId)) {
    body['VpdRouteEntryId'] = request.vpdRouteEntryId;
  }
  var req = new OpenApi.OpenApiRequest{ 
    body = OpenApiUtil.parseToMap(body),
  };
  var params = new OpenApi.Params{
    action = 'ListVccRouteEntries',
    version = '2022-05-30',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'POST',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Queries Lingjun connection route entries.
 *
 * @param request ListVccRouteEntriesRequest
 * @return ListVccRouteEntriesResponse
 */
async function listVccRouteEntries(request: ListVccRouteEntriesRequest): ListVccRouteEntriesResponse {
  var runtime = new Util.RuntimeOptions{};
  return listVccRouteEntriesWithOptions(request, runtime);
}

model ListVccsRequest {
  bandwidth?: int32(name='Bandwidth', description='The peak bandwidth of the Lingjun connection instance. Unit: Mbit/s. Valid values: 1000 to 400000', example='5000'),
  cenId?: string(name='CenId', description='The ID of the CEN instance; [What is the CEN?](https://help.aliyun.com/document_detail/181681.html)

You can call the [DescribeCens](https://help.aliyun.com/document_detail/468215.htm) to query the information of CEN instances under the current Alibaba Cloud account.', example='cen-95iwtpyvj3kk1v0ao0'),
  enablePage?: boolean(name='EnablePage', description='Specifies whether to enable paged query. Optional values:

*   **true**: Enable pagination query
*   **false**: Pagination query is disabled', example='false'),
  exStatus?: string(name='ExStatus', description='Excludes all data in the specified status. If the status parameter exists, ExStatus does not take effect.', example='Prepaid'),
  filterErId?: string(name='FilterErId', description='Filter queries by Lingjun HUB instance ID', example='er-a7rqv1rq'),
  pageNumber?: int32(name='PageNumber', description='The page number of the page to return. Pages start from page 1. Default value: 1.', example='1'),
  pageSize?: int32(name='PageSize', description='The number of entries to return on each page. Default value: 20.', example='20'),
  regionId?: string(name='RegionId', description='The region ID.', example='cn-wulanchabu'),
  resourceGroupId?: string(name='ResourceGroupId', description='The resource group ID.

For more information about resource groups, see [Resource groups](https://help.aliyun.com/document_detail/94475.htm?spm=a2c4g.11186623.0.0.29e15d7akXhpuu).', example='rg-aeky5f3qx6ceapq'),
  status?: string(name='Status', description='The instance status.', example='Available'),
  tag?: [ 
    {
      key?: string(name='Key', description='The tag key of the VPN attachment.

You cannot specify an empty string as a tag key. It can be up to 64 characters in length and cannot start with aliyun or acs:. It cannot contain http:// or https://.

You can specify at most 20 tag keys in each call.', example='tag-vcc'),
      value?: string(name='Value', description='The tag value of the VPN connection.

The tag value can be empty or a string of up to 128 characters. It cannot start with aliyun or acs:, and cannot contain http:// or https://.

Each key-value pair must be unique. You can specify values for at most 20 tag keys in each call.', example='vcc-group-1'),
    }
  ](name='Tag', description='The tag information.

You can specify up to 20 tags.'),
  vccId?: string(name='VccId', description='The ID of the Lingjun connection instance.', example='vcc-cn-zvp2w222001'),
  vpcId?: string(name='VpcId', description='Virtual Private Cloud IDs; [What is Virtual Private Cloud](https://help.aliyun.com/document_detail/34217.html)

You can call the [DescribeVpcs](https://help.aliyun.com/document_detail/35739.html#demo-0) operation to query the specified VPC.', example='vpc-bp1nrtkmamy329u6a1z0i'),
  vpdId?: string(name='VpdId', description='Lingjun CIDR block instance ID', example='vpd-omqutbff'),
}

model ListVccsResponseBody = {
  accessDeniedDetail?: string(name='AccessDeniedDetail', description='The details about the access denial.', example='None'),
  code?: int32(name='Code', description='The response status code.', example='0'),
  content?: {
    data?: [ 
      {
        accessPointId?: string(name='AccessPointId', description='Express Connect circuit access point ID:

*   **ap-cn-wulanchabu-jn-ts-A**: Ulanqab-Jining-A
*   **ap-cn-heyuan-yc-ts-SA127**: Heyuan-Yuancheng-A', example='ap-cn-wulanchabu-jn-ts-A'),
        bandwidthStr?: string(name='BandwidthStr', description='The bandwidth of the port.', example='1000'),
        bgpAsn?: string(name='BgpAsn', description='bgp as number', example='bgpAsn'),
        bgpCidr?: string(name='BgpCidr', description='bgp network segment', example='172.16.128.0/24'),
        cenId?: string(name='CenId', description='The ID of the CEN instance; [What is the CEN?](https://help.aliyun.com/document_detail/181681.html)

You can call the [DescribeCens](https://help.aliyun.com/document_detail/468215.htm) to query the information of CEN instances under the current Alibaba Cloud account.', example='cen-w15qot0pfvs83pkckj'),
        cenOwnerId?: string(name='CenOwnerId', description='Account to which cen belongs', example='1238685214107736'),
        commodityCode?: string(name='CommodityCode', description='Commodity code', example='bccluster_cloudconnectionpre_public_cn'),
        connectionType?: string(name='ConnectionType', description='The connection mode. Valid values:

*   **VPC**
*   **CENTR**', example='CENTR'),
        createTime?: string(name='CreateTime', description='The time when the data address was created.', example='1678273219000'),
        currentNode?: string(name='CurrentNode', description='Current process node', example='test-xxxx-node-x'),
        erInfos?: [ 
          {
            connections?: long(name='Connections', description='Connections', example='2'),
            createTime?: string(name='CreateTime', description='The time when the data address was created.', example='1678273219000'),
            description?: string(name='Description', description='Description', example='test_api_coverage'),
            erId?: string(name='ErId', description='Elastic Router ID', example='er-a7rqv1rq'),
            erName?: string(name='ErName', description='ER instance name', example='er-1'),
            gmtModified?: string(name='GmtModified', description='The time when the agent was last modified.', example='1678273219000'),
            masterZoneId?: string(name='MasterZoneId', description='Primary Zone', example='cn-wulanchabu-b'),
            message?: string(name='Message', description='The message that is returned.', example='success'),
            regionId?: string(name='RegionId', description='ER region information', example='cn-wulanchabu'),
            routeMaps?: long(name='RouteMaps', description='Number of routing policy', example='2'),
            status?: string(name='Status', description='The status of the intervention entry. Valid value:', example='Available'),
            tenantId?: string(name='TenantId', description='The ID of the tenant.', example='1620939556166277'),
          }
        ](name='ErInfos', description='List of bound Lingjun HUB information'),
        expirationDate?: string(name='ExpirationDate', description='The time when the application expired.', example='1678273219000'),
        gmtModified?: string(name='GmtModified', description='The time when the cluster was updated.', example='1678273219000'),
        lineOperator?: string(name='LineOperator', description='The connectivity provider of the Express Connect circuit. Valid values:

*   **CO**: other connectivity providers in the Chinese mainland', example='CO'),
        message?: string(name='Message', description='The error message. (If the instance is in the Exception state, the exception cause is prompted.)', example='some message'),
        portType?: string(name='PortType', description='The port type of the Express Connect circuit. Valid values:

*   **100GBase-LR**: 100,000 megabytes of single-mode optical port (10 km)', example='100GBase-LR'),
        rate?: double(name='Rate', description='Process progress; value returns 0 to 1; not started is null', example='1'),
        regionId?: string(name='RegionId', description='The region ID.', example='cn-wulanchabu'),
        resourceGroupId?: string(name='ResourceGroupId', description='The ID of your Alibaba Cloud resource group.

For more information about resource groups, see [Resource groups](https://help.aliyun.com/document_detail/94475.htm?spm=a2c4g.11186623.0.0.29e15d7akXhpuu).', example='rg-aek2l4sq6l7unhi'),
        spec?: string(name='Spec', description='The compute specification.', example='Large'),
        status?: string(name='Status', description='The state of the rule.', example='Init'),
        tags?: [ 
          {
            tagKey?: string(name='TagKey', description='The tag key.

You cannot specify an empty string as a tag key. It can be up to 64 characters in length and cannot start with aliyun or acs:. It cannot contain http:// or https://.

You can specify at most 20 tag keys in each call.', example='tag-vcc'),
            tagValue?: string(name='TagValue', description='The value of the tag that is added to the resource.

The tag value can be empty or a string of up to 128 characters. It cannot start with aliyun or acs:, and cannot contain http:// or https://.

Each key-value pair must be unique. You can specify values for at most 20 tag keys in each call.', example='vcc-group-1'),
          }
        ](name='Tags', description='The tag information.

You can specify up to 20 tags.'),
        taskId?: string(name='TaskId', description='The job ID.', example='task-cd544092-ed0a-49e9-83eb-e8c94770dccf'),
        tenantId?: string(name='TenantId', description='The ID of the tenant.', example='1620939556166279'),
        vccId?: string(name='VccId', description='The ID of the Lingjun connection instance.', example='vcc-cn-zvp2w222001'),
        vccName?: string(name='VccName', description='The name of the Lingjun connection instance.', example='vcc-heyuan-backup'),
        vpcId?: string(name='VpcId', description='Virtual Private Cloud IDs; [What is Virtual Private Cloud](https://help.aliyun.com/document_detail/34217.html)

You can call the [DescribeVpcs](https://help.aliyun.com/document_detail/35739.html#demo-0) operation to query the specified VPC.', example='vpc-f8ziirfl9k25h2qn7y4f8'),
        vpdBaseInfo?: {
          cidr?: string(name='Cidr', description='The CIDR block of the VPD.

*   We recommend that you use an RFC private endpoint as the Lingjun CIDR block, such as 10.0.0.0/8,172.16.0.0/12,192.168.0.0/16. In scenarios where the Doringjun CIDR block is connected to each other or where the Lingjun CIDR block is connected to a VPC, make sure that the addresses do not conflict with each other.
*   You can also use a custom CIDR block other than 100.64.0.0/10, 224.0.0.0/4, 127.0.0.0/8, or 169.254.0.0/16 and their subnets as the primary IPv4 CIDR block of the VPD.', example='10.0.0.0/13'),
          createTime?: string(name='CreateTime', description='The time when the data address was created.', example='1668158213000'),
          vpdId?: string(name='VpdId', description='Lingjun CIDR block instance ID', example='vpd-9n7ioqrp'),
          vpdName?: string(name='VpdName', description='Lingjun CIDR block instance name', example='yzp-rg-test3'),
        }(name='VpdBaseInfo', description='Lingjun network segment information (applicable to the scene where the old version of Lingjun connection is directly bound to Lingjun network segment)'),
        vpdId?: string(name='VpdId', description='Lingjun CIDR block instance ID', example='vpd-eoiy88ju'),
        zoneId?: string(name='ZoneId', description='The zone ID.', example='cn-wulanchabu-b'),
      }
    ](name='Data', description='Lingjun Connection Information List'),
    total?: long(name='Total', description='The total number of entries returned.', example='0'),
  }(name='Content', description='The response parameters.'),
  message?: string(name='Message', description='The error message. (If the instance is in the Exception state, the exception cause is prompted.)', example='success'),
  requestId?: string(name='RequestId', description='Request ID of the current request', example='28451248-7038-5184-B5D3-80F104654BE8'),
}

model ListVccsResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: ListVccsResponseBody(name='body'),
}

/**
 * @summary query the details of one or more lingjun connections, including the specification, Express Connect circuit access port type, instance status, bandwidth, and bgp network segment.
 *
 * @param request ListVccsRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return ListVccsResponse
 */
async function listVccsWithOptions(request: ListVccsRequest, runtime: Util.RuntimeOptions): ListVccsResponse {
  Util.validateModel(request);
  var body : map[string]any = {};
  if (!Util.isUnset(request.bandwidth)) {
    body['Bandwidth'] = request.bandwidth;
  }
  if (!Util.isUnset(request.cenId)) {
    body['CenId'] = request.cenId;
  }
  if (!Util.isUnset(request.enablePage)) {
    body['EnablePage'] = request.enablePage;
  }
  if (!Util.isUnset(request.exStatus)) {
    body['ExStatus'] = request.exStatus;
  }
  if (!Util.isUnset(request.filterErId)) {
    body['FilterErId'] = request.filterErId;
  }
  if (!Util.isUnset(request.pageNumber)) {
    body['PageNumber'] = request.pageNumber;
  }
  if (!Util.isUnset(request.pageSize)) {
    body['PageSize'] = request.pageSize;
  }
  if (!Util.isUnset(request.regionId)) {
    body['RegionId'] = request.regionId;
  }
  if (!Util.isUnset(request.resourceGroupId)) {
    body['ResourceGroupId'] = request.resourceGroupId;
  }
  if (!Util.isUnset(request.status)) {
    body['Status'] = request.status;
  }
  if (!Util.isUnset(request.tag)) {
    body['Tag'] = request.tag;
  }
  if (!Util.isUnset(request.vccId)) {
    body['VccId'] = request.vccId;
  }
  if (!Util.isUnset(request.vpcId)) {
    body['VpcId'] = request.vpcId;
  }
  if (!Util.isUnset(request.vpdId)) {
    body['VpdId'] = request.vpdId;
  }
  var req = new OpenApi.OpenApiRequest{ 
    body = OpenApiUtil.parseToMap(body),
  };
  var params = new OpenApi.Params{
    action = 'ListVccs',
    version = '2022-05-30',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'POST',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary query the details of one or more lingjun connections, including the specification, Express Connect circuit access port type, instance status, bandwidth, and bgp network segment.
 *
 * @param request ListVccsRequest
 * @return ListVccsResponse
 */
async function listVccs(request: ListVccsRequest): ListVccsResponse {
  var runtime = new Util.RuntimeOptions{};
  return listVccsWithOptions(request, runtime);
}

model ListVpdGrantRulesRequest {
  enablePage?: boolean(name='EnablePage', description='Specifies whether to enable pagination query.', example='false'),
  erId?: string(name='ErId', description='Lingjun HUB Instance ID', example='er-kkopgtne'),
  forSelect?: boolean(name='ForSelect', description='Use the drop-down box', example='true'),
  grantRuleId?: string(name='GrantRuleId', description='Authorization Entry ID', example='grant-rule-8rgvqazb'),
  grantTenantId?: string(name='GrantTenantId', description='Authorized Tenant ID', example='1620939556166279'),
  instanceId?: string(name='InstanceId', description='The ID of the network instance that you want to query.', example='vpd-8rgvqazb'),
  instanceName?: string(name='InstanceName', description='Instance name', example='vpd-1'),
  pageNumber?: int32(name='PageNumber', description='The page number of the page to return. Pages start from page 1. Default value: 1.', example='1'),
  pageSize?: int32(name='PageSize', description='The number of entries to return on each page. Default value: 10.', example='10'),
  regionId?: string(name='RegionId', description='The region ID.

This parameter is required.', example='cn-wulanchabu'),
  resourceGroupId?: string(name='ResourceGroupId', description='Resource group instance ID', example='rg-aek2l4sq6l7unhi'),
}

model ListVpdGrantRulesResponseBody = {
  accessDeniedDetail?: string(name='AccessDeniedDetail', description='The details about the access denial.', example='None'),
  code?: int32(name='Code', description='The HTTP status code.', example='0'),
  content?: {
    data?: [ 
      {
        createTime?: string(name='CreateTime', description='The time when the data address was created.', example='1643013506000'),
        erId?: string(name='ErId', description='The current network sample is authorized to the specified Lingjun HUB sample ID.', example='er-kkopgtne'),
        grantRuleId?: string(name='GrantRuleId', description='Authorization Entry ID', example='grant-rule-8rgvqazb'),
        grantTenantId?: string(name='GrantTenantId', description='The ID of the tenant to which the current instance is authorized.', example='1672372231790'),
        instanceId?: string(name='InstanceId', description='Lingjun CIDR block instance ID', example='vpd-8rgvqazb'),
        instanceName?: string(name='InstanceName', description='The name of the ECU.', example='vpd-1'),
        product?: string(name='Product', description='The type of the authorized product. Valid values:

*   **VPD**: indicates a VPD instance of the Lingjun network segment.
*   **VCC**: indicates that Lingjun connects to the VCC instance.

The caller does not need to specify.', example='VPD'),
        regionId?: string(name='RegionId', description='The region ID.', example='cn-wulanchabu'),
        resourceGroupId?: string(name='ResourceGroupId', description='Resource group instance ID', example='rg-aek2l4sq6l7unhi'),
        tenantId?: string(name='TenantId', description='The ID of the tenant.', example='1655449505171'),
        used?: boolean(name='Used', description='Whether the current authorized instance has been bound', example='true'),
      }
    ](name='Data', description='Lingjun CIDR block authorization information list'),
    total?: long(name='Total', description='The total number of entries returned.', example='0'),
  }(name='Content', description='The response parameters.'),
  message?: string(name='Message', description='The error message. (If the instance is in the Exception state, the exception cause is prompted.)', example='success'),
  requestId?: string(name='RequestId', description='Request ID of the current request', example='A56F7D3C-8850-5AF4-A342-2D71C9A9D1CC'),
}

model ListVpdGrantRulesResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: ListVpdGrantRulesResponseBody(name='body'),
}

/**
 * @summary Queries the details of one or more route entries in the CIDR block of Lingjun, including the route type, route entry status, destination CIDR block, and instance information of the next route entry.
 *
 * @param request ListVpdGrantRulesRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return ListVpdGrantRulesResponse
 */
async function listVpdGrantRulesWithOptions(request: ListVpdGrantRulesRequest, runtime: Util.RuntimeOptions): ListVpdGrantRulesResponse {
  Util.validateModel(request);
  var body : map[string]any = {};
  if (!Util.isUnset(request.enablePage)) {
    body['EnablePage'] = request.enablePage;
  }
  if (!Util.isUnset(request.erId)) {
    body['ErId'] = request.erId;
  }
  if (!Util.isUnset(request.forSelect)) {
    body['ForSelect'] = request.forSelect;
  }
  if (!Util.isUnset(request.grantRuleId)) {
    body['GrantRuleId'] = request.grantRuleId;
  }
  if (!Util.isUnset(request.grantTenantId)) {
    body['GrantTenantId'] = request.grantTenantId;
  }
  if (!Util.isUnset(request.instanceId)) {
    body['InstanceId'] = request.instanceId;
  }
  if (!Util.isUnset(request.instanceName)) {
    body['InstanceName'] = request.instanceName;
  }
  if (!Util.isUnset(request.pageNumber)) {
    body['PageNumber'] = request.pageNumber;
  }
  if (!Util.isUnset(request.pageSize)) {
    body['PageSize'] = request.pageSize;
  }
  if (!Util.isUnset(request.regionId)) {
    body['RegionId'] = request.regionId;
  }
  if (!Util.isUnset(request.resourceGroupId)) {
    body['ResourceGroupId'] = request.resourceGroupId;
  }
  var req = new OpenApi.OpenApiRequest{ 
    body = OpenApiUtil.parseToMap(body),
  };
  var params = new OpenApi.Params{
    action = 'ListVpdGrantRules',
    version = '2022-05-30',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'POST',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Queries the details of one or more route entries in the CIDR block of Lingjun, including the route type, route entry status, destination CIDR block, and instance information of the next route entry.
 *
 * @param request ListVpdGrantRulesRequest
 * @return ListVpdGrantRulesResponse
 */
async function listVpdGrantRules(request: ListVpdGrantRulesRequest): ListVpdGrantRulesResponse {
  var runtime = new Util.RuntimeOptions{};
  return listVpdGrantRulesWithOptions(request, runtime);
}

model ListVpdRouteEntriesRequest {
  destinationCidrBlock?: string(name='DestinationCidrBlock', description='Destination CIDR block', example='0.0.0.0/0'),
  enablePage?: boolean(name='EnablePage', description='Specifies whether to enable paged query. Optional values:

*   **true**: Enable pagination query
*   **false**: Pagination query is disabled', example='false'),
  ignoreDetailedRouteEntry?: boolean(name='IgnoreDetailedRouteEntry', description='Filter 32 detailed CIDR blocks. Default value: true', example='true'),
  nextHopId?: string(name='NextHopId', description='Next Hop Instance', example='vcc-cn-209300qha01'),
  nextHopType?: string(name='NextHopType', description='Next Hop Instance Type', example='VCC'),
  pageNumber?: int32(name='PageNumber', description='The page number of the page to return. Pages start from page 1. Default value: 1.', example='1'),
  pageSize?: int32(name='PageSize', description='The number of entries per page. Default value: 20.', example='20'),
  regionId?: string(name='RegionId', description='The region ID.

This parameter is required.', example='cn-wulanchabu'),
  resourceGroupId?: string(name='ResourceGroupId', description='Resource group instance ID', example='rg-acfm4mlwqjalz7a'),
  routeType?: string(name='RouteType', description='Route type', example='BGP'),
  status?: string(name='Status', description='The status of the enterprise-level snapshot policy.', example='Available'),
  vpdId?: string(name='VpdId', description='Lingjun CIDR block instance ID

This parameter is required.', example='vpd-fuliephf'),
  vpdRouteEntryId?: string(name='VpdRouteEntryId', description='Lingjun CIDR block route entry instance ID', example='vpd-rte-4r1zbhoh'),
}

model ListVpdRouteEntriesResponseBody = {
  accessDeniedDetail?: string(name='AccessDeniedDetail', description='The details about the access denial.', example='None'),
  code?: int32(name='Code', description='The response status code.', example='0'),
  content?: {
    data?: [ 
      {
        destinationCidrBlock?: string(name='DestinationCidrBlock', description='Destination CIDR block', example='0.0.0.0/0'),
        gmtModified?: string(name='GmtModified', description='The time when the cluster was updated.', example='1678273219000'),
        nextHopId?: string(name='NextHopId', description='Next Hop Instance', example='er-bmlqiym1'),
        nextHopType?: string(name='NextHopType', description='Next Hop Instance Type', example='ER'),
        regionId?: string(name='RegionId', description='The region ID.', example='cn-wulanchabu'),
        resourceGroupId?: string(name='ResourceGroupId', description='Resource group instance ID', example='rg-acfmxhucx5ewuwy'),
        resourceTenantId?: string(name='ResourceTenantId', description='The ID of the tenant to which the resource belongs.', example='1655449505171'),
        routeType?: string(name='RouteType', description='Route type', example='BGP'),
        status?: string(name='Status', description='The status of the intervention entry. Valid value:', example='Available'),
        tenantId?: string(name='TenantId', description='The ID of the tenant.', example='1655449505171'),
        vpdId?: string(name='VpdId', description='Lingjun CIDR block instance ID', example='vpd-eoiy88ju'),
        vpdRouteEntryId?: string(name='VpdRouteEntryId', description='The ID of the route entry.', example='vpd-rte-toekyqel'),
      }
    ](name='Data', description='Lingjun CIDR block route entry list'),
    total?: long(name='Total', description='The total number of entries returned.', example='0'),
  }(name='Content', description='The response parameters.'),
  message?: string(name='Message', description='The error message. (If the instance is in the Exception state, the exception cause is prompted.)', example='success'),
  requestId?: string(name='RequestId', description='Request ID of the current request', example='039C3C3A-3C37-5672-80D5-D8CD48C676D1'),
}

model ListVpdRouteEntriesResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: ListVpdRouteEntriesResponseBody(name='body'),
}

/**
 * @summary Queries the route entries of the Lingjun CIDR block.
 *
 * @param request ListVpdRouteEntriesRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return ListVpdRouteEntriesResponse
 */
async function listVpdRouteEntriesWithOptions(request: ListVpdRouteEntriesRequest, runtime: Util.RuntimeOptions): ListVpdRouteEntriesResponse {
  Util.validateModel(request);
  var body : map[string]any = {};
  if (!Util.isUnset(request.destinationCidrBlock)) {
    body['DestinationCidrBlock'] = request.destinationCidrBlock;
  }
  if (!Util.isUnset(request.enablePage)) {
    body['EnablePage'] = request.enablePage;
  }
  if (!Util.isUnset(request.ignoreDetailedRouteEntry)) {
    body['IgnoreDetailedRouteEntry'] = request.ignoreDetailedRouteEntry;
  }
  if (!Util.isUnset(request.nextHopId)) {
    body['NextHopId'] = request.nextHopId;
  }
  if (!Util.isUnset(request.nextHopType)) {
    body['NextHopType'] = request.nextHopType;
  }
  if (!Util.isUnset(request.pageNumber)) {
    body['PageNumber'] = request.pageNumber;
  }
  if (!Util.isUnset(request.pageSize)) {
    body['PageSize'] = request.pageSize;
  }
  if (!Util.isUnset(request.regionId)) {
    body['RegionId'] = request.regionId;
  }
  if (!Util.isUnset(request.resourceGroupId)) {
    body['ResourceGroupId'] = request.resourceGroupId;
  }
  if (!Util.isUnset(request.routeType)) {
    body['RouteType'] = request.routeType;
  }
  if (!Util.isUnset(request.status)) {
    body['Status'] = request.status;
  }
  if (!Util.isUnset(request.vpdId)) {
    body['VpdId'] = request.vpdId;
  }
  if (!Util.isUnset(request.vpdRouteEntryId)) {
    body['VpdRouteEntryId'] = request.vpdRouteEntryId;
  }
  var req = new OpenApi.OpenApiRequest{ 
    body = OpenApiUtil.parseToMap(body),
  };
  var params = new OpenApi.Params{
    action = 'ListVpdRouteEntries',
    version = '2022-05-30',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'POST',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Queries the route entries of the Lingjun CIDR block.
 *
 * @param request ListVpdRouteEntriesRequest
 * @return ListVpdRouteEntriesResponse
 */
async function listVpdRouteEntries(request: ListVpdRouteEntriesRequest): ListVpdRouteEntriesResponse {
  var runtime = new Util.RuntimeOptions{};
  return listVpdRouteEntriesWithOptions(request, runtime);
}

model ListVpdsRequest {
  enablePage?: boolean(name='EnablePage', description='Specifies whether to enable paged query.', example='false'),
  filterErId?: string(name='FilterErId', description='Queries the network segments of Lingjun that are not bound to a specified Lingjun HUB.', example='er-kkopgtne'),
  forSelect?: boolean(name='ForSelect', description='If you select a drop-down list, only the basic information (including the instance ID and instance name) is returned. Possible values:

*   **true**: Select Query Use from the drop-down list.
*   **false**: Normal queries are used.', example='true'),
  pageNumber?: int32(name='PageNumber', description='The page number of the page to return. Start value: 1 Default value: 1.', example='1'),
  pageSize?: int32(name='PageSize', description='The number of entries per page.', example='20'),
  regionId?: string(name='RegionId', description='The region ID.

This parameter is required.', example='cn-wulanchabu'),
  resourceGroupId?: string(name='ResourceGroupId', description='The resource group ID.

For more information about resource groups, see [Resource groups](https://help.aliyun.com/document_detail/94475.htm?spm=a2c4g.11186623.0.0.29e15d7akXhpuu).', example='rg-aeky5f3qx6ceapq'),
  status?: string(name='Status', description='The status of the CLB instance. Valid values:

*   **Available**: Normal.
*   **Not Available**: Not available.
*   **Executing**: The task is being executed.
*   **Deleting**: The account is being deleted', example='Available'),
  tag?: [ 
    {
      key?: string(name='Key', description='The tag key of the VPN attachment.

You cannot specify an empty string as a tag key. It can be up to 64 characters in length and cannot start with aliyun or acs:. It cannot contain http:// or https://.

You can specify at most 20 tag keys in each call.', example='tag-vpd-region'),
      value?: string(name='Value', description='The tag value of the VPN connection.

The tag value can be empty or a string of up to 128 characters. It cannot start with aliyun or acs:, and cannot contain http:// or https://.

Each key-value pair must be unique. You can specify values for at most 20 tag keys in each call.', example='wulanchabu'),
    }
  ](name='Tag', description='The tag information.

You can specify up to 20 tags.'),
  vpdId?: string(name='VpdId', description='The ID of the VPD instance.', example='vpd-fuliephf'),
  vpdName?: string(name='VpdName', description='The name of the VPD instance.', example='vpd-1'),
  withDependence?: boolean(name='WithDependence', description='Specifies whether to include the dependent resource information. We recommend that you do not query the dependent resource information when you query by page. You can query the dependent resource information separately when you delete it. Possible values:

*   **true**: with dependency information.
*   **false**: does not include dependency information.', example='false'),
  withoutVcc?: boolean(name='WithoutVcc', description='Queries the information about a Lingjun CIDR block that is not bound to a Lingjun connection. Possible values:

*   **true**: filters out VPDs that have been bound to VCC
*   **false**: does not filter VPD that has been bound to VCC', example='true'),
}

model ListVpdsResponseBody = {
  accessDeniedDetail?: string(name='AccessDeniedDetail', description='The details about the access denial.', example='None'),
  code?: int32(name='Code', description='The response status code.', example='0'),
  content?: {
    data?: [ 
      {
        cidr?: string(name='Cidr', description='The CIDR block of the VPD.

*   We recommend that you use an RFC private endpoint as the Lingjun CIDR block, such as 10.0.0.0/8,172.16.0.0/12,192.168.0.0/16. In scenarios where the Doringjun CIDR block is connected to each other or where the Lingjun CIDR block is connected to a VPC, make sure that the addresses do not conflict with each other.
*   You can also use a custom CIDR block other than 100.64.0.0/10, 224.0.0.0/4, 127.0.0.0/8, or 169.254.0.0/16 and their subnets as the primary IPv4 CIDR block of the VPD.', example='10.0.0.0/8'),
        createTime?: string(name='CreateTime', description='The time when the activation code was created.', example='1678273219000'),
        dependence?: map[string]any(name='Dependence', description='Dependencies.'),
        erInfos?: [ 
          {
            connections?: long(name='Connections', description='The number of connections.', example='2'),
            createTime?: string(name='CreateTime', description='The time when the activation code was created.', example='2023-12-26 20:16:36'),
            description?: string(name='Description', description='The description of the synchronization task.', example='No description'),
            erId?: string(name='ErId', description='The ID of the Elastic Router (ER) instance.', example='er-63vzm0fw'),
            erName?: string(name='ErName', description='The name of the Lingjun HUB(ER) instance.', example='er-1'),
            gmtModified?: string(name='GmtModified', description='The time when the O\\\\&M task was modified.', example='2023-12-26 20:16:36'),
            masterZoneId?: string(name='MasterZoneId', description='The primary zone.', example='cn-wulanchabu-b'),
            message?: string(name='Message', description='The returned message.', example='success'),
            regionId?: string(name='RegionId', description='The supported region.', example='cn-wulanchabu'),
            routeMaps?: long(name='RouteMaps', description='The number of routing policy.', example='2'),
            status?: string(name='Status', description='The task status.', example='Available'),
            tenantId?: string(name='TenantId', description='The tenant ID.', example='1620939556166277'),
          }
        ](name='ErInfos', description='The information list of the bound Lingjun HUB(ER).'),
        gmtModified?: string(name='GmtModified', description='The time when the O\\\\&M task was modified.', example='1678273219000'),
        message?: string(name='Message', description='The returned message.', example='success'),
        ncCount?: int32(name='NcCount', description='nc quantity.', example='16'),
        networkInterfaceCount?: int32(name='NetworkInterfaceCount', description='Number of Lingjun network interface controller', example='1'),
        regionId?: string(name='RegionId', description='The region ID.', example='cn-wulanchabu'),
        resourceGroupId?: string(name='ResourceGroupId', description='The ID of your Alibaba Cloud resource group.

For more information about resource groups, see [Resource groups](https://help.aliyun.com/document_detail/94475.htm?spm=a2c4g.11186623.0.0.29e15d7akXhpuu).', example='rg-aek2l4sq6l7unhi'),
        secondaryCidrBlocks?: [ string ](name='SecondaryCidrBlocks', description='The list of additional CIDR blocks.'),
        serviceCidr?: string(name='ServiceCidr', description='The Service CIDR block.', example='169.254.252.0/23'),
        status?: string(name='Status', description='The task status.', example='Available'),
        subnetCount?: int32(name='SubnetCount', description='The number of subnets.', example='1'),
        tags?: [ 
          {
            tagKey?: string(name='TagKey', description='The tag key.

You cannot specify an empty string as a tag key. It can be up to 64 characters in length and cannot start with aliyun or acs:. It cannot contain http:// or https://.

You can specify at most 20 tag keys in each call.', example='tag-vpd-region'),
            tagValue?: string(name='TagValue', description='The value of the tag that is added to the resource.

The tag value can be empty or a string of up to 128 characters. It cannot start with aliyun or acs:, and cannot contain http:// or https://.

Each key-value pair must be unique. You can specify values for at most 20 tag keys in each call.', example='cn-wulanchabu'),
          }
        ](name='Tags', description='The tag information.

You can specify up to 20 tags.'),
        tenantId?: string(name='TenantId', description='The tenant ID.', example='1655449505171'),
        vpdId?: string(name='VpdId', description='The ID of the VPD instance.', example='vpd-lg4dppgi'),
        vpdName?: string(name='VpdName', description='The name of the VPD.', example='vpd-1'),
      }
    ](name='Data', description='The returned data.'),
    total?: long(name='Total', description='The total number of entries that are returned.', example='0'),
  }(name='Content', description='The response data.'),
  message?: string(name='Message', description='The additional information that is returned.', example='success'),
  requestId?: string(name='RequestId', description='The request ID.', example='9C50C9CD-E799-54DA-BA7A-1FAF3DF80857'),
}

model ListVpdsResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: ListVpdsResponseBody(name='body'),
}

/**
 * @summary Queries the details of one or more Lingjun CIDR blocks, including the status of Lingjun CIDR blocks, Cidr addresses, service CIDR blocks, and Subnet.
 *
 * @param request ListVpdsRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return ListVpdsResponse
 */
async function listVpdsWithOptions(request: ListVpdsRequest, runtime: Util.RuntimeOptions): ListVpdsResponse {
  Util.validateModel(request);
  var body : map[string]any = {};
  if (!Util.isUnset(request.enablePage)) {
    body['EnablePage'] = request.enablePage;
  }
  if (!Util.isUnset(request.filterErId)) {
    body['FilterErId'] = request.filterErId;
  }
  if (!Util.isUnset(request.forSelect)) {
    body['ForSelect'] = request.forSelect;
  }
  if (!Util.isUnset(request.pageNumber)) {
    body['PageNumber'] = request.pageNumber;
  }
  if (!Util.isUnset(request.pageSize)) {
    body['PageSize'] = request.pageSize;
  }
  if (!Util.isUnset(request.regionId)) {
    body['RegionId'] = request.regionId;
  }
  if (!Util.isUnset(request.resourceGroupId)) {
    body['ResourceGroupId'] = request.resourceGroupId;
  }
  if (!Util.isUnset(request.status)) {
    body['Status'] = request.status;
  }
  if (!Util.isUnset(request.tag)) {
    body['Tag'] = request.tag;
  }
  if (!Util.isUnset(request.vpdId)) {
    body['VpdId'] = request.vpdId;
  }
  if (!Util.isUnset(request.vpdName)) {
    body['VpdName'] = request.vpdName;
  }
  if (!Util.isUnset(request.withDependence)) {
    body['WithDependence'] = request.withDependence;
  }
  if (!Util.isUnset(request.withoutVcc)) {
    body['WithoutVcc'] = request.withoutVcc;
  }
  var req = new OpenApi.OpenApiRequest{ 
    body = OpenApiUtil.parseToMap(body),
  };
  var params = new OpenApi.Params{
    action = 'ListVpds',
    version = '2022-05-30',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'POST',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Queries the details of one or more Lingjun CIDR blocks, including the status of Lingjun CIDR blocks, Cidr addresses, service CIDR blocks, and Subnet.
 *
 * @param request ListVpdsRequest
 * @return ListVpdsResponse
 */
async function listVpds(request: ListVpdsRequest): ListVpdsResponse {
  var runtime = new Util.RuntimeOptions{};
  return listVpdsWithOptions(request, runtime);
}

model QueryInstanceNcdRequest {
  instanceId1?: string(name='InstanceId1', description='Instance 1ID

This parameter is required.', example='lni-1235****'),
  instanceId2?: string(name='InstanceId2', description='Instance 2ID

This parameter is required.', example='lni-1234****'),
  instanceType?: string(name='InstanceType', description='The parameter that specifies the instance type.

Valid value:

*   node: Lingjun node.
*   lni: lingjun network interface controller.

This parameter is required.', example='lni'),
  regionId?: string(name='RegionId', description='The region ID.

This parameter is required.', example='cn-wulanchabu'),
}

model QueryInstanceNcdResponseBody = {
  accessDeniedDetail?: string(name='AccessDeniedDetail', description='The details about the access denial.', example='None'),
  code?: int32(name='Code', description='The response status code.', example='0'),
  content?: {
    instanceId1?: string(name='InstanceId1', description='Instance 1ID', example='lni-1235****'),
    instanceId2?: string(name='InstanceId2', description='Instance 2ID', example='lni-1234****'),
    instanceType?: string(name='InstanceType', description='Instance Type

Valid value:

*   node: Lingjun node.
*   lni: lingjun network interface controller.', example='lni'),
    ncd?: int32(name='Ncd', description='network communication distance between instances', example='1'),
  }(name='Content', description='The response parameters.'),
  message?: string(name='Message', description='The returned message.', example='You don\\\\"t have the permission of this operation, action=eflo:QueryInstanceNcd, arn=acs:eflo:cn-shenzhen:1263399219805497:networkinterface/*, resourceGroup=null'),
  requestId?: string(name='RequestId', description='Request ID of the current request', example='BDBCC783-84CA-5733-8EEA-645C88B9009C'),
}

model QueryInstanceNcdResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: QueryInstanceNcdResponseBody(name='body'),
}

/**
 * @summary Query the network communication distance (Network Communication Distance,NCD) between instances (Lingjun node, Lingjun network interface controller).
 *
 * @param request QueryInstanceNcdRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return QueryInstanceNcdResponse
 */
async function queryInstanceNcdWithOptions(request: QueryInstanceNcdRequest, runtime: Util.RuntimeOptions): QueryInstanceNcdResponse {
  Util.validateModel(request);
  var body : map[string]any = {};
  if (!Util.isUnset(request.instanceId1)) {
    body['InstanceId1'] = request.instanceId1;
  }
  if (!Util.isUnset(request.instanceId2)) {
    body['InstanceId2'] = request.instanceId2;
  }
  if (!Util.isUnset(request.instanceType)) {
    body['InstanceType'] = request.instanceType;
  }
  if (!Util.isUnset(request.regionId)) {
    body['RegionId'] = request.regionId;
  }
  var req = new OpenApi.OpenApiRequest{ 
    body = OpenApiUtil.parseToMap(body),
  };
  var params = new OpenApi.Params{
    action = 'QueryInstanceNcd',
    version = '2022-05-30',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'POST',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Query the network communication distance (Network Communication Distance,NCD) between instances (Lingjun node, Lingjun network interface controller).
 *
 * @param request QueryInstanceNcdRequest
 * @return QueryInstanceNcdResponse
 */
async function queryInstanceNcd(request: QueryInstanceNcdRequest): QueryInstanceNcdResponse {
  var runtime = new Util.RuntimeOptions{};
  return queryInstanceNcdWithOptions(request, runtime);
}

model RefundVccRequest {
  regionId?: string(name='RegionId', description='Region', example='cn-wulanchabu'),
  vccId?: string(name='VccId', description='Lingjun Connection ID', example='vcc-cn-zvp2w222001'),
}

model RefundVccResponseBody = {
  accessDeniedDetail?: string(name='AccessDeniedDetail', description='The details about the access denial.

>  This parameter is returned only if Resource Access Management (RAM) permission verification failed.', example='None'),
  code?: int32(name='Code', description='The response status code', example='0'),
  content?: any(name='Content', description='Response content', example='{}'),
  message?: string(name='Message', description='Response message, which is \\\\"success\\\\" if the request succeeds', example='success'),
  requestId?: string(name='RequestId', description='Request ID of the current request', example='AC8C713A-A9F4-5984-A5E1-76496DF35153'),
}

model RefundVccResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: RefundVccResponseBody(name='body'),
}

/**
 * @summary Unsubscribe inactive Lingjun connection
 *
 * @description Only unsubscribable for Lingjun connections in the prepayment status.
 *
 * @param request RefundVccRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return RefundVccResponse
 */
async function refundVccWithOptions(request: RefundVccRequest, runtime: Util.RuntimeOptions): RefundVccResponse {
  Util.validateModel(request);
  var body : map[string]any = {};
  if (!Util.isUnset(request.regionId)) {
    body['RegionId'] = request.regionId;
  }
  if (!Util.isUnset(request.vccId)) {
    body['VccId'] = request.vccId;
  }
  var req = new OpenApi.OpenApiRequest{ 
    body = OpenApiUtil.parseToMap(body),
  };
  var params = new OpenApi.Params{
    action = 'RefundVcc',
    version = '2022-05-30',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'POST',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Unsubscribe inactive Lingjun connection
 *
 * @description Only unsubscribable for Lingjun connections in the prepayment status.
 *
 * @param request RefundVccRequest
 * @return RefundVccResponse
 */
async function refundVcc(request: RefundVccRequest): RefundVccResponse {
  var runtime = new Util.RuntimeOptions{};
  return refundVccWithOptions(request, runtime);
}

model RetryVccRequest {
  regionId?: string(name='RegionId', description='The region ID.', example='cn-wulanchabu'),
  vccId?: string(name='VccId', description='Lingjun Connection ID', example='vcc-cn-zvp2w222001'),
}

model RetryVccResponseBody = {
  accessDeniedDetail?: string(name='AccessDeniedDetail', description='The details about the access denial.', example='None'),
  code?: int32(name='Code', description='The response status code.', example='0'),
  content?: any(name='Content', description='The returned data.', example='{}'),
  message?: string(name='Message', description='The error message.', example='success'),
  requestId?: string(name='RequestId', description='Request ID of the current request', example='7F9082CC-3D94-560F-A575-8E8EF6CE2CB8'),
}

model RetryVccResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: RetryVccResponseBody(name='body'),
}

/**
 * @summary Retry trying to create /delete a Lingjun connection.
 *
 * @description This operation allows the user to retry the operation if the Lingjun connection creation and deletion processes fail. Only the Lingjun connection in the creation failure and deletion failure state can be retried
 *
 * @param request RetryVccRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return RetryVccResponse
 */
async function retryVccWithOptions(request: RetryVccRequest, runtime: Util.RuntimeOptions): RetryVccResponse {
  Util.validateModel(request);
  var body : map[string]any = {};
  if (!Util.isUnset(request.regionId)) {
    body['RegionId'] = request.regionId;
  }
  if (!Util.isUnset(request.vccId)) {
    body['VccId'] = request.vccId;
  }
  var req = new OpenApi.OpenApiRequest{ 
    body = OpenApiUtil.parseToMap(body),
  };
  var params = new OpenApi.Params{
    action = 'RetryVcc',
    version = '2022-05-30',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'POST',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Retry trying to create /delete a Lingjun connection.
 *
 * @description This operation allows the user to retry the operation if the Lingjun connection creation and deletion processes fail. Only the Lingjun connection in the creation failure and deletion failure state can be retried
 *
 * @param request RetryVccRequest
 * @return RetryVccResponse
 */
async function retryVcc(request: RetryVccRequest): RetryVccResponse {
  var runtime = new Util.RuntimeOptions{};
  return retryVccWithOptions(request, runtime);
}

model UnAssignPrivateIpAddressRequest {
  clientToken?: string(name='ClientToken', description='By default, popApi is not ignored and idempotent', example='141cccd6-dfbd-11ec-b8e8-0242ac110003'),
  ipName?: string(name='IpName', description='IP unique identifier

This parameter is required.', example='sip-xxxx'),
  networkInterfaceId?: string(name='NetworkInterfaceId', description='Lingjun network interface controller ID

This parameter is required.', example='lni-bp18exxqa2rvfn45e5pz'),
  privateIpAddress?: string(name='PrivateIpAddress', description='The private IP address of the instance.', example='10.209.75.242'),
  regionId?: string(name='RegionId', description='Region

This parameter is required.', example='cn-wulanchabu'),
  subnetId?: string(name='SubnetId', description='Subnet

This parameter is required.', example='subnet-f3zfzmnc'),
}

model UnAssignPrivateIpAddressResponseBody = {
  accessDeniedDetail?: string(name='AccessDeniedDetail', description='The details about the access denial.', example='None'),
  code?: int32(name='Code', description='The response status code.', example='0'),
  content?: {
    ipName?: string(name='IpName', description='IP unique identifier', example='sip-xxxxx'),
    networkInterfaceId?: string(name='NetworkInterfaceId', description='Lingjun network interface controller ID', example='lni-bp164jwjpdq4lnsy83s5'),
  }(name='Content', description='The response parameters.'),
  message?: string(name='Message', description='The error message. (If the instance is in the Exception state, the exception cause is prompted.)', example='You don\\\\"t have the permission to do this operation.'),
  requestId?: string(name='RequestId', description='Request ID of the current request', example='A88DFED5-24B7-5A3E-87DE-380BF06F3C90'),
}

model UnAssignPrivateIpAddressResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: UnAssignPrivateIpAddressResponseBody(name='body'),
}

/**
 * @summary Deletes an assigned secondary private IP address.
 *
 * @param request UnAssignPrivateIpAddressRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return UnAssignPrivateIpAddressResponse
 */
async function unAssignPrivateIpAddressWithOptions(request: UnAssignPrivateIpAddressRequest, runtime: Util.RuntimeOptions): UnAssignPrivateIpAddressResponse {
  Util.validateModel(request);
  var body : map[string]any = {};
  if (!Util.isUnset(request.clientToken)) {
    body['ClientToken'] = request.clientToken;
  }
  if (!Util.isUnset(request.ipName)) {
    body['IpName'] = request.ipName;
  }
  if (!Util.isUnset(request.networkInterfaceId)) {
    body['NetworkInterfaceId'] = request.networkInterfaceId;
  }
  if (!Util.isUnset(request.privateIpAddress)) {
    body['PrivateIpAddress'] = request.privateIpAddress;
  }
  if (!Util.isUnset(request.regionId)) {
    body['RegionId'] = request.regionId;
  }
  if (!Util.isUnset(request.subnetId)) {
    body['SubnetId'] = request.subnetId;
  }
  var req = new OpenApi.OpenApiRequest{ 
    body = OpenApiUtil.parseToMap(body),
  };
  var params = new OpenApi.Params{
    action = 'UnAssignPrivateIpAddress',
    version = '2022-05-30',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'POST',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Deletes an assigned secondary private IP address.
 *
 * @param request UnAssignPrivateIpAddressRequest
 * @return UnAssignPrivateIpAddressResponse
 */
async function unAssignPrivateIpAddress(request: UnAssignPrivateIpAddressRequest): UnAssignPrivateIpAddressResponse {
  var runtime = new Util.RuntimeOptions{};
  return unAssignPrivateIpAddressWithOptions(request, runtime);
}

model UnAssociateVpdCidrBlockRequest {
  regionId?: string(name='RegionId', description='The region ID.

This parameter is required.', example='cn-wulanchabu'),
  secondaryCidrBlock?: string(name='SecondaryCidrBlock', description='The additional CIDR block.

This parameter is required.', example='192.168.0.0/16'),
  vpdId?: string(name='VpdId', description='The ID of the Lingjun CIDR block.

This parameter is required.', example='vpd-aof7dat1'),
}

model UnAssociateVpdCidrBlockResponseBody = {
  accessDeniedDetail?: string(name='AccessDeniedDetail', description='访问被拒绝详细信息。', example='None'),
  code?: int32(name='Code', description='The response status code.', example='0'),
  content?: {
    vpdId?: string(name='VpdId', description='The ID of the Lingjun CIDR block.', example='vpd-ze3na0wf'),
  }(name='Content', description='The response data.'),
  message?: string(name='Message', description='The error message. (If the instance is in the Exception state, the exception cause is prompted.)', example='success'),
  requestId?: string(name='RequestId', description='Request ID of the current request', example='9C50C9CD-E799-54DA-BA7A-1FAF3DF80857'),
}

model UnAssociateVpdCidrBlockResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: UnAssociateVpdCidrBlockResponseBody(name='body'),
}

/**
 * @summary This function can be used to delete the additional network segment of VPD.
 *
 * @description **
 * **Warning** If the attached CIDR block has Lingjun subnet resources, you must delete the dependent resources before you can delete the attached CIDR block.
 *
 * @param request UnAssociateVpdCidrBlockRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return UnAssociateVpdCidrBlockResponse
 */
async function unAssociateVpdCidrBlockWithOptions(request: UnAssociateVpdCidrBlockRequest, runtime: Util.RuntimeOptions): UnAssociateVpdCidrBlockResponse {
  Util.validateModel(request);
  var body : map[string]any = {};
  if (!Util.isUnset(request.regionId)) {
    body['RegionId'] = request.regionId;
  }
  if (!Util.isUnset(request.secondaryCidrBlock)) {
    body['SecondaryCidrBlock'] = request.secondaryCidrBlock;
  }
  if (!Util.isUnset(request.vpdId)) {
    body['VpdId'] = request.vpdId;
  }
  var req = new OpenApi.OpenApiRequest{ 
    body = OpenApiUtil.parseToMap(body),
  };
  var params = new OpenApi.Params{
    action = 'UnAssociateVpdCidrBlock',
    version = '2022-05-30',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'POST',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary This function can be used to delete the additional network segment of VPD.
 *
 * @description **
 * **Warning** If the attached CIDR block has Lingjun subnet resources, you must delete the dependent resources before you can delete the attached CIDR block.
 *
 * @param request UnAssociateVpdCidrBlockRequest
 * @return UnAssociateVpdCidrBlockResponse
 */
async function unAssociateVpdCidrBlock(request: UnAssociateVpdCidrBlockRequest): UnAssociateVpdCidrBlockResponse {
  var runtime = new Util.RuntimeOptions{};
  return unAssociateVpdCidrBlockWithOptions(request, runtime);
}

model UnassignLeniPrivateIpAddressRequest {
  clientToken?: string(name='ClientToken', description='The idempotent identifier.', example='967e77a2-b61d-11ec-a147-0242c0a80504'),
  elasticNetworkInterfaceId?: string(name='ElasticNetworkInterfaceId', description='Lingjun Elastic Network Interface ID.

This parameter is required.', example='leni-1234****'),
  ipName?: string(name='IpName', description='Lingjun Elastic Network Interface secondary private IP unique identifier.

This parameter is required.', example='sip-8ylg****'),
  regionId?: string(name='RegionId', description='The region ID.

This parameter is required.', example='cn-wulanchabu'),
}

model UnassignLeniPrivateIpAddressResponseBody = {
  accessDeniedDetail?: string(name='AccessDeniedDetail', description='The details about the access denial.', example='None'),
  code?: int32(name='Code', description='The response status code.', example='0'),
  content?: {
    elasticNetworkInterfaceId?: string(name='ElasticNetworkInterfaceId', description='Lingjun Elastic Network Interface ID.', example='leni-1234****'),
    ipName?: string(name='IpName', description='Lingjun Elastic Network Interface secondary private IP unique identifier.', example='sip-dqvs****'),
  }(name='Content', description='The response data.', example='{}'),
  message?: string(name='Message', description='The response message.', example='success'),
  requestId?: string(name='RequestId', description='The request ID.', example='AC8C713A-A9F4-5984-A5E1-76496DF35153'),
}

model UnassignLeniPrivateIpAddressResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: UnassignLeniPrivateIpAddressResponseBody(name='body'),
}

/**
 * @summary Delete the assigned secondary private IP address of Lingjun Elastic Network Interface.
 *
 * @param request UnassignLeniPrivateIpAddressRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return UnassignLeniPrivateIpAddressResponse
 */
async function unassignLeniPrivateIpAddressWithOptions(request: UnassignLeniPrivateIpAddressRequest, runtime: Util.RuntimeOptions): UnassignLeniPrivateIpAddressResponse {
  Util.validateModel(request);
  var body : map[string]any = {};
  if (!Util.isUnset(request.clientToken)) {
    body['ClientToken'] = request.clientToken;
  }
  if (!Util.isUnset(request.elasticNetworkInterfaceId)) {
    body['ElasticNetworkInterfaceId'] = request.elasticNetworkInterfaceId;
  }
  if (!Util.isUnset(request.ipName)) {
    body['IpName'] = request.ipName;
  }
  if (!Util.isUnset(request.regionId)) {
    body['RegionId'] = request.regionId;
  }
  var req = new OpenApi.OpenApiRequest{ 
    body = OpenApiUtil.parseToMap(body),
  };
  var params = new OpenApi.Params{
    action = 'UnassignLeniPrivateIpAddress',
    version = '2022-05-30',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'POST',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Delete the assigned secondary private IP address of Lingjun Elastic Network Interface.
 *
 * @param request UnassignLeniPrivateIpAddressRequest
 * @return UnassignLeniPrivateIpAddressResponse
 */
async function unassignLeniPrivateIpAddress(request: UnassignLeniPrivateIpAddressRequest): UnassignLeniPrivateIpAddressResponse {
  var runtime = new Util.RuntimeOptions{};
  return unassignLeniPrivateIpAddressWithOptions(request, runtime);
}

model UpdateElasticNetworkInterfaceRequest {
  clientToken?: string(name='ClientToken', description='The client token that is used to ensure the idempotence of the request.', example='3fd79d62-ab1d-11ec-9a53-0242ac110004'),
  description?: string(name='Description', description='The description of the variable.', example='LHICDOSEExternaluserinquiryP'),
  elasticNetworkInterfaceId?: string(name='ElasticNetworkInterfaceId', description='Lingjun Elastic Network Interface ID

This parameter is required.', example='leni-1234****'),
  regionId?: string(name='RegionId', description='The region ID.

This parameter is required.', example='cn-wulanchabu'),
  securityGroupId?: string(name='SecurityGroupId', description='The ID of the security group.', example='sg-wz9fj2s3o21nw2****'),
}

model UpdateElasticNetworkInterfaceResponseBody = {
  accessDeniedDetail?: string(name='AccessDeniedDetail', description='The details about the access denial.', example='None'),
  code?: int32(name='Code', description='The response status code.', example='0'),
  content?: {
    elasticNetworkInterfaceId?: string(name='ElasticNetworkInterfaceId', description='Lingjun Elastic Network Interface ID', example='leni-1234****'),
    nodeId?: string(name='NodeId', description='Lingjun Node ID', example='e01-cn-lbj3aej****'),
  }(name='Content', description='The response parameters.'),
  message?: string(name='Message', description='The return message.', example='success'),
  requestId?: string(name='RequestId', description='The ID of the request.', example='AC8C713A-A9F4-5984-A5E1-76496DF35153'),
}

model UpdateElasticNetworkInterfaceResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: UpdateElasticNetworkInterfaceResponseBody(name='body'),
}

/**
 * @summary Update Lingjun Elastic Network Interface information.
 *
 * @param request UpdateElasticNetworkInterfaceRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return UpdateElasticNetworkInterfaceResponse
 */
async function updateElasticNetworkInterfaceWithOptions(request: UpdateElasticNetworkInterfaceRequest, runtime: Util.RuntimeOptions): UpdateElasticNetworkInterfaceResponse {
  Util.validateModel(request);
  var body : map[string]any = {};
  if (!Util.isUnset(request.clientToken)) {
    body['ClientToken'] = request.clientToken;
  }
  if (!Util.isUnset(request.description)) {
    body['Description'] = request.description;
  }
  if (!Util.isUnset(request.elasticNetworkInterfaceId)) {
    body['ElasticNetworkInterfaceId'] = request.elasticNetworkInterfaceId;
  }
  if (!Util.isUnset(request.regionId)) {
    body['RegionId'] = request.regionId;
  }
  if (!Util.isUnset(request.securityGroupId)) {
    body['SecurityGroupId'] = request.securityGroupId;
  }
  var req = new OpenApi.OpenApiRequest{ 
    body = OpenApiUtil.parseToMap(body),
  };
  var params = new OpenApi.Params{
    action = 'UpdateElasticNetworkInterface',
    version = '2022-05-30',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'POST',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Update Lingjun Elastic Network Interface information.
 *
 * @param request UpdateElasticNetworkInterfaceRequest
 * @return UpdateElasticNetworkInterfaceResponse
 */
async function updateElasticNetworkInterface(request: UpdateElasticNetworkInterfaceRequest): UpdateElasticNetworkInterfaceResponse {
  var runtime = new Util.RuntimeOptions{};
  return updateElasticNetworkInterfaceWithOptions(request, runtime);
}

model UpdateErRequest {
  description?: string(name='Description', description='The description of the document.', example='description'),
  erId?: string(name='ErId', description='Lingjun HUB Instance ID

This parameter is required.', example='er-kkopgtne'),
  erName?: string(name='ErName', description='Parameter', example='er-wulanchabu-main'),
  regionId?: string(name='RegionId', description='The region ID.

This parameter is required.', example='cn-wulanchabu'),
}

model UpdateErResponseBody = {
  accessDeniedDetail?: string(name='AccessDeniedDetail', description='The details about the access denial.', example='None'),
  code?: int32(name='Code', description='The response status code.', example='0'),
  content?: map[string]any(name='Content', description='The returned data.', example='{}'),
  message?: string(name='Message', description='The error message. (If the instance is in the Exception state, the exception cause is prompted.)', example='success'),
  requestId?: string(name='RequestId', description='Request ID of the current request', example='3D9D6E7B-365B-5200-BFA6-9B79E269058C'),
}

model UpdateErResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: UpdateErResponseBody(name='body'),
}

/**
 * @summary Updated Lingjun HUB.
 *
 * @param request UpdateErRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return UpdateErResponse
 */
async function updateErWithOptions(request: UpdateErRequest, runtime: Util.RuntimeOptions): UpdateErResponse {
  Util.validateModel(request);
  var body : map[string]any = {};
  if (!Util.isUnset(request.description)) {
    body['Description'] = request.description;
  }
  if (!Util.isUnset(request.erId)) {
    body['ErId'] = request.erId;
  }
  if (!Util.isUnset(request.erName)) {
    body['ErName'] = request.erName;
  }
  if (!Util.isUnset(request.regionId)) {
    body['RegionId'] = request.regionId;
  }
  var req = new OpenApi.OpenApiRequest{ 
    body = OpenApiUtil.parseToMap(body),
  };
  var params = new OpenApi.Params{
    action = 'UpdateEr',
    version = '2022-05-30',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'POST',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Updated Lingjun HUB.
 *
 * @param request UpdateErRequest
 * @return UpdateErResponse
 */
async function updateEr(request: UpdateErRequest): UpdateErResponse {
  var runtime = new Util.RuntimeOptions{};
  return updateErWithOptions(request, runtime);
}

model UpdateErAttachmentRequest {
  erAttachmentId?: string(name='ErAttachmentId', description='The connection ID of the Lingjun HUB network instance.

This parameter is required.', example='er-attachment-i1ioibyf'),
  erAttachmentName?: string(name='ErAttachmentName', description='Lingjun HUB Network Instance Connection Name', example='er-attachment-wulanchabu-main'),
  erId?: string(name='ErId', description='Lingjun HUB ID

This parameter is required.', example='er-kkopgtne'),
  regionId?: string(name='RegionId', description='The region ID.

This parameter is required.', example='cn-wulanchabu'),
}

model UpdateErAttachmentResponseBody = {
  accessDeniedDetail?: string(name='AccessDeniedDetail', description='The details about the access denial.', example='None'),
  code?: int32(name='Code', description='The response status code.', example='0'),
  content?: map[string]any(name='Content', description='The response parameters.', example='{}'),
  message?: string(name='Message', description='The error message. (If the instance is in the Exception state, the exception cause is prompted.)', example='success'),
  requestId?: string(name='RequestId', description='Request ID of the current request', example='7F9082CC-3D94-560F-A575-8E8EF6CE2CB8'),
}

model UpdateErAttachmentResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: UpdateErAttachmentResponseBody(name='body'),
}

/**
 * @summary Updates a network instance connection.
 *
 * @param request UpdateErAttachmentRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return UpdateErAttachmentResponse
 */
async function updateErAttachmentWithOptions(request: UpdateErAttachmentRequest, runtime: Util.RuntimeOptions): UpdateErAttachmentResponse {
  Util.validateModel(request);
  var body : map[string]any = {};
  if (!Util.isUnset(request.erAttachmentId)) {
    body['ErAttachmentId'] = request.erAttachmentId;
  }
  if (!Util.isUnset(request.erAttachmentName)) {
    body['ErAttachmentName'] = request.erAttachmentName;
  }
  if (!Util.isUnset(request.erId)) {
    body['ErId'] = request.erId;
  }
  if (!Util.isUnset(request.regionId)) {
    body['RegionId'] = request.regionId;
  }
  var req = new OpenApi.OpenApiRequest{ 
    body = OpenApiUtil.parseToMap(body),
  };
  var params = new OpenApi.Params{
    action = 'UpdateErAttachment',
    version = '2022-05-30',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'POST',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Updates a network instance connection.
 *
 * @param request UpdateErAttachmentRequest
 * @return UpdateErAttachmentResponse
 */
async function updateErAttachment(request: UpdateErAttachmentRequest): UpdateErAttachmentResponse {
  var runtime = new Util.RuntimeOptions{};
  return updateErAttachmentWithOptions(request, runtime);
}

model UpdateErRouteMapRequest {
  description?: string(name='Description', description='The description of the document.', example='test-example'),
  erId?: string(name='ErId', description='Lingjun HUB ID

This parameter is required.', example='er-kkopgtne'),
  erRouteMapId?: string(name='ErRouteMapId', description='routing policy ID

This parameter is required.', example='er-rmap-uwglhzom'),
  regionId?: string(name='RegionId', description='The region ID.

This parameter is required.', example='cn-wulanchabu'),
}

model UpdateErRouteMapResponseBody = {
  accessDeniedDetail?: string(name='AccessDeniedDetail', description='The details about the access denial.', example='None'),
  code?: int32(name='Code', description='The response status code.', example='0'),
  content?: map[string]any(name='Content', description='The response parameters.', example='{}'),
  message?: string(name='Message', description='The error message. (If the instance is in the Exception state, the exception cause is prompted.)', example='success'),
  requestId?: string(name='RequestId', description='The request ID.', example='BDBCC783-84CA-5733-8EEA-645C88B9009C'),
}

model UpdateErRouteMapResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: UpdateErRouteMapResponseBody(name='body'),
}

/**
 * @summary Update some information about the routing policy, including the description and name of the routing policy.
 *
 * @param request UpdateErRouteMapRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return UpdateErRouteMapResponse
 */
async function updateErRouteMapWithOptions(request: UpdateErRouteMapRequest, runtime: Util.RuntimeOptions): UpdateErRouteMapResponse {
  Util.validateModel(request);
  var body : map[string]any = {};
  if (!Util.isUnset(request.description)) {
    body['Description'] = request.description;
  }
  if (!Util.isUnset(request.erId)) {
    body['ErId'] = request.erId;
  }
  if (!Util.isUnset(request.erRouteMapId)) {
    body['ErRouteMapId'] = request.erRouteMapId;
  }
  if (!Util.isUnset(request.regionId)) {
    body['RegionId'] = request.regionId;
  }
  var req = new OpenApi.OpenApiRequest{ 
    body = OpenApiUtil.parseToMap(body),
  };
  var params = new OpenApi.Params{
    action = 'UpdateErRouteMap',
    version = '2022-05-30',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'POST',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Update some information about the routing policy, including the description and name of the routing policy.
 *
 * @param request UpdateErRouteMapRequest
 * @return UpdateErRouteMapResponse
 */
async function updateErRouteMap(request: UpdateErRouteMapRequest): UpdateErRouteMapResponse {
  var runtime = new Util.RuntimeOptions{};
  return updateErRouteMapWithOptions(request, runtime);
}

model UpdateLeniPrivateIpAddressRequest {
  description?: string(name='Description', description='The description of the ECS instances.

This parameter is required.', example='description'),
  elasticNetworkInterfaceId?: string(name='ElasticNetworkInterfaceId', description='Lingjun Elastic Network Interface ID.

This parameter is required.', example='leni-1234****'),
  ipName?: string(name='IpName', description='Lingjun Elastic Network Interface secondary private IP unique identifier.

This parameter is required.', example='sip-8ylg****'),
  regionId?: string(name='RegionId', description='The region ID.

This parameter is required.', example='cn-wulanchabu'),
}

model UpdateLeniPrivateIpAddressResponseBody = {
  accessDeniedDetail?: string(name='AccessDeniedDetail', description='The details about the access denial.', example='None'),
  code?: int32(name='Code', description='The response status code.', example='0'),
  content?: {
    elasticNetworkInterfaceId?: string(name='ElasticNetworkInterfaceId', description='Lingjun Elastic Network Interface ID.', example='leni-1234****'),
    ipName?: string(name='IpName', description='Lingjun Elastic Network Interface secondary private IP unique identifier.', example='sip-8ylg****'),
  }(name='Content', description='The response data.'),
  message?: string(name='Message', description='The returned message.', example='success'),
  requestId?: string(name='RequestId', description='The request ID.', example='A88DFED5-24B7-5A3E-87DE-380BF06F3C90'),
}

model UpdateLeniPrivateIpAddressResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: UpdateLeniPrivateIpAddressResponseBody(name='body'),
}

/**
 * @summary Updated the description of the secondary private network assigned by the Lingjun Elastic Network Interface.
 *
 * @param request UpdateLeniPrivateIpAddressRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return UpdateLeniPrivateIpAddressResponse
 */
async function updateLeniPrivateIpAddressWithOptions(request: UpdateLeniPrivateIpAddressRequest, runtime: Util.RuntimeOptions): UpdateLeniPrivateIpAddressResponse {
  Util.validateModel(request);
  var body : map[string]any = {};
  if (!Util.isUnset(request.description)) {
    body['Description'] = request.description;
  }
  if (!Util.isUnset(request.elasticNetworkInterfaceId)) {
    body['ElasticNetworkInterfaceId'] = request.elasticNetworkInterfaceId;
  }
  if (!Util.isUnset(request.ipName)) {
    body['IpName'] = request.ipName;
  }
  if (!Util.isUnset(request.regionId)) {
    body['RegionId'] = request.regionId;
  }
  var req = new OpenApi.OpenApiRequest{ 
    body = OpenApiUtil.parseToMap(body),
  };
  var params = new OpenApi.Params{
    action = 'UpdateLeniPrivateIpAddress',
    version = '2022-05-30',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'POST',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Updated the description of the secondary private network assigned by the Lingjun Elastic Network Interface.
 *
 * @param request UpdateLeniPrivateIpAddressRequest
 * @return UpdateLeniPrivateIpAddressResponse
 */
async function updateLeniPrivateIpAddress(request: UpdateLeniPrivateIpAddressRequest): UpdateLeniPrivateIpAddressResponse {
  var runtime = new Util.RuntimeOptions{};
  return updateLeniPrivateIpAddressWithOptions(request, runtime);
}

model UpdateSubnetRequest {
  regionId?: string(name='RegionId', description='The region ID.

This parameter is required.', example='cn-wulanchabu'),
  subnetId?: string(name='SubnetId', description='The subnet instance ID.

This parameter is required.', example='subnet-f3zfzmnc'),
  subnetName?: string(name='SubnetName', description='The new name for the subnet instance.', example='subnet-1'),
  vpdId?: string(name='VpdId', description='The ID of the VPD to which the subnet belongs.

This parameter is required.', example='vpd-aof7dat1'),
  zoneId?: string(name='ZoneId', description='The zone ID.

This parameter is required.', example='cn-wulanchabu-a'),
}

model UpdateSubnetResponseBody = {
  accessDeniedDetail?: string(name='AccessDeniedDetail', description='The details about the access denial.', example='None'),
  code?: int32(name='Code', description='The response status code.', example='0'),
  content?: {
    subnetId?: string(name='SubnetId', description='The subnet instance ID.', example='subnet-yuvn29bn'),
  }(name='Content', description='The response content.'),
  message?: string(name='Message', description='The message that is returned.', example='success'),
  requestId?: string(name='RequestId', description='The request ID.', example='3D9D6E7B-365B-5200-BFA6-9B79E269058C'),
}

model UpdateSubnetResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: UpdateSubnetResponseBody(name='body'),
}

/**
 * @summary Updates some information about a specified subnet instance, including the name of the subnet instance.
 *
 * @param request UpdateSubnetRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return UpdateSubnetResponse
 */
async function updateSubnetWithOptions(request: UpdateSubnetRequest, runtime: Util.RuntimeOptions): UpdateSubnetResponse {
  Util.validateModel(request);
  var body : map[string]any = {};
  if (!Util.isUnset(request.regionId)) {
    body['RegionId'] = request.regionId;
  }
  if (!Util.isUnset(request.subnetId)) {
    body['SubnetId'] = request.subnetId;
  }
  if (!Util.isUnset(request.subnetName)) {
    body['SubnetName'] = request.subnetName;
  }
  if (!Util.isUnset(request.vpdId)) {
    body['VpdId'] = request.vpdId;
  }
  if (!Util.isUnset(request.zoneId)) {
    body['ZoneId'] = request.zoneId;
  }
  var req = new OpenApi.OpenApiRequest{ 
    body = OpenApiUtil.parseToMap(body),
  };
  var params = new OpenApi.Params{
    action = 'UpdateSubnet',
    version = '2022-05-30',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'POST',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Updates some information about a specified subnet instance, including the name of the subnet instance.
 *
 * @param request UpdateSubnetRequest
 * @return UpdateSubnetResponse
 */
async function updateSubnet(request: UpdateSubnetRequest): UpdateSubnetResponse {
  var runtime = new Util.RuntimeOptions{};
  return updateSubnetWithOptions(request, runtime);
}

model UpdateVccRequest {
  bandwidth?: int32(name='Bandwidth', description='The peak bandwidth of the Lingjun connection instance. Unit: Mbit/s. Valid values: 1000 to 400000', example='1000'),
  orderId?: string(name='OrderId', description='The ID of the order placed on the instance.', example='20006627643'),
  regionId?: string(name='RegionId', description='The region ID.', example='cn-wulanchabu'),
  vccId?: string(name='VccId', description='The ID of the Lingjun connection instance.

This parameter is required.', example='vcc-cn-zvp2w222001'),
  vccName?: string(name='VccName', description='The name of the Lingjun connection instance.', example='vcc-heyuan-backup'),
}

model UpdateVccResponseBody = {
  accessDeniedDetail?: string(name='AccessDeniedDetail', description='The details about the access denial.', example='None'),
  code?: int32(name='Code', description='The response status code.', example='0'),
  content?: {
    vccId?: string(name='VccId', description='The ID of the Lingjun connection instance.', example='vcc-cn-2r42v22cn03'),
  }(name='Content', description='The response parameters.'),
  message?: string(name='Message', description='The error message. (If the instance is in the Exception state, the exception cause is prompted.)', example='success'),
  requestId?: string(name='RequestId', description='The ID of the request.', example='F906C4D3-7444-58E2-9819-E3D8563571A3'),
}

model UpdateVccResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: UpdateVccResponseBody(name='body'),
}

/**
 * @summary Updates the information about a Lingjun connection instance, including the peak bandwidth and name of the Lingjun connection instance.
 *
 * @param request UpdateVccRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return UpdateVccResponse
 */
async function updateVccWithOptions(request: UpdateVccRequest, runtime: Util.RuntimeOptions): UpdateVccResponse {
  Util.validateModel(request);
  var body : map[string]any = {};
  if (!Util.isUnset(request.bandwidth)) {
    body['Bandwidth'] = request.bandwidth;
  }
  if (!Util.isUnset(request.orderId)) {
    body['OrderId'] = request.orderId;
  }
  if (!Util.isUnset(request.regionId)) {
    body['RegionId'] = request.regionId;
  }
  if (!Util.isUnset(request.vccId)) {
    body['VccId'] = request.vccId;
  }
  if (!Util.isUnset(request.vccName)) {
    body['VccName'] = request.vccName;
  }
  var req = new OpenApi.OpenApiRequest{ 
    body = OpenApiUtil.parseToMap(body),
  };
  var params = new OpenApi.Params{
    action = 'UpdateVcc',
    version = '2022-05-30',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'POST',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Updates the information about a Lingjun connection instance, including the peak bandwidth and name of the Lingjun connection instance.
 *
 * @param request UpdateVccRequest
 * @return UpdateVccResponse
 */
async function updateVcc(request: UpdateVccRequest): UpdateVccResponse {
  var runtime = new Util.RuntimeOptions{};
  return updateVccWithOptions(request, runtime);
}

model UpdateVpdRequest {
  regionId?: string(name='RegionId', description='The region ID.

This parameter is required.', example='cn-wulanchabu'),
  vpdId?: string(name='VpdId', description='The ID of the VPD instance.

This parameter is required.', example='vpd-omqutbff'),
  vpdName?: string(name='VpdName', description='The name of the VPD instance.', example='vpd-lingjun'),
}

model UpdateVpdResponseBody = {
  accessDeniedDetail?: string(name='AccessDeniedDetail', description='The details about the access denial.', example='None'),
  code?: int32(name='Code', description='The response status code.', example='0'),
  content?: {
    vpdId?: string(name='VpdId', description='The ID of the VPD instance.', example='vpd-lg4dppgi'),
  }(name='Content', description='The response data.'),
  message?: string(name='Message', description='The additional information that is returned.', example='success'),
  requestId?: string(name='RequestId', description='The request ID.', example='AC8C713A-A9F4-5984-A5E1-76496DF35153'),
}

model UpdateVpdResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: UpdateVpdResponseBody(name='body'),
}

/**
 * @summary Updates the information about the Lingjun CIDR block, including the name of the Lingjun CIDR block.
 *
 * @param request UpdateVpdRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return UpdateVpdResponse
 */
async function updateVpdWithOptions(request: UpdateVpdRequest, runtime: Util.RuntimeOptions): UpdateVpdResponse {
  Util.validateModel(request);
  var body : map[string]any = {};
  if (!Util.isUnset(request.regionId)) {
    body['RegionId'] = request.regionId;
  }
  if (!Util.isUnset(request.vpdId)) {
    body['VpdId'] = request.vpdId;
  }
  if (!Util.isUnset(request.vpdName)) {
    body['VpdName'] = request.vpdName;
  }
  var req = new OpenApi.OpenApiRequest{ 
    body = OpenApiUtil.parseToMap(body),
  };
  var params = new OpenApi.Params{
    action = 'UpdateVpd',
    version = '2022-05-30',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'POST',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Updates the information about the Lingjun CIDR block, including the name of the Lingjun CIDR block.
 *
 * @param request UpdateVpdRequest
 * @return UpdateVpdResponse
 */
async function updateVpd(request: UpdateVpdRequest): UpdateVpdResponse {
  var runtime = new Util.RuntimeOptions{};
  return updateVpdWithOptions(request, runtime);
}

